From d9acf328610e8023b516fa25317b3b1076c58017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Thu, 17 Sep 2015 19:26:52 +0200 Subject: [PATCH 01/23] Fix Do not always append htdocs to include path Serving the htdocs directly is a best practice. The old code generates a bogus include path in that case. This code mitigates the issue by setting an include path only when needed. --- htdocs/main.inc.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 7c682756edd..62f0271ebd0 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -164,7 +164,10 @@ if (! defined('NOSCANPOSTFORINJECTION')) } // This is to make Dolibarr working with Plesk -if (! empty($_SERVER['DOCUMENT_ROOT'])) set_include_path($_SERVER['DOCUMENT_ROOT'].'/htdocs'); +if (! empty($_SERVER['DOCUMENT_ROOT']) && substr($_SERVER['DOCUMENT_ROOT'], -6) !== 'htdocs') { + set_include_path($_SERVER['DOCUMENT_ROOT'] . '/htdocs'); + } +} // Include the conf.php and functions.lib.php require_once 'filefunc.inc.php'; From 4201e8b0326f290698631da883719b2f5f65d141 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 1 Oct 2015 14:38:31 +0200 Subject: [PATCH 02/23] FIX #3630 - Wrong balance report when module salaries and donation disabled --- htdocs/compta/resultat/clientfourn.php | 9 +- htdocs/compta/resultat/index.php | 156 +++++++++++++------------ htdocs/langs/en_US/compta.lang | 6 +- htdocs/langs/fr_FR/compta.lang | 4 +- 4 files changed, 93 insertions(+), 82 deletions(-) diff --git a/htdocs/compta/resultat/clientfourn.php b/htdocs/compta/resultat/clientfourn.php index b5aab7090d6..f5c197a9c48 100644 --- a/htdocs/compta/resultat/clientfourn.php +++ b/htdocs/compta/resultat/clientfourn.php @@ -547,7 +547,7 @@ if ($mysoc->tva_assuj == 'franchise') // Non assujeti * Salaries */ -if ($conf->salaries->enabled) +if (! empty($conf->salaries->enabled)) { if ($modecompta == 'CREANCES-DETTES') { $column = 'p.datev'; @@ -621,13 +621,16 @@ if ($conf->salaries->enabled) * Donation */ -if ($conf->donation->enabled) +if (! empty($conf->don->enabled)) { print ''.$langs->trans("Donation").''; $sql = "SELECT p.societe as name, p.firstname, p.lastname, date_format(p.datedon,'%Y-%m') as dm, sum(p.amount) as amount"; $sql.= " FROM ".MAIN_DB_PREFIX."don as p"; $sql.= " WHERE p.entity = ".$conf->entity; - $sql.= " AND fk_statut=2"; + if ($modecompta == 'CREANCES-DETTES') + $sql.= " AND fk_statut in (1,2)"; + else + $sql.= " AND fk_statut=2"; if (! empty($date_start) && ! empty($date_end)) $sql.= " AND p.datedon >= '".$db->idate($date_start)."' AND p.datedon <= '".$db->idate($date_end)."'"; $sql.= " GROUP BY p.societe, p.firstname, p.lastname, dm"; diff --git a/htdocs/compta/resultat/index.php b/htdocs/compta/resultat/index.php index 7b008ca49b4..870ba001466 100644 --- a/htdocs/compta/resultat/index.php +++ b/htdocs/compta/resultat/index.php @@ -474,85 +474,93 @@ $reshook=$hookmanager->executeHooks('addStatisticLine',$parameters,$object,$acti /* * Salaries */ - -if ($modecompta == 'CREANCES-DETTES') { - $column = 'p.datev'; -} else { - $column = 'p.datep'; -} - -$subtotal_ht = 0; -$subtotal_ttc = 0; -$sql = "SELECT p.label as nom, date_format($column,'%Y-%m') as dm, sum(p.amount) as amount"; -$sql.= " FROM ".MAIN_DB_PREFIX."payment_salary as p"; -$sql.= " WHERE p.entity = ".$conf->entity; -$sql.= " GROUP BY p.label, dm"; - -dol_syslog("get social salaries payments"); -$result=$db->query($sql); -if ($result) +if (! empty($conf->salaries->enabled)) { - $num = $db->num_rows($result); - $var=false; - $i = 0; - if ($num) - { - while ($i < $num) - { - $obj = $db->fetch_object($result); - - if (! isset($decaiss[$obj->dm])) $decaiss[$obj->dm]=0; - $decaiss[$obj->dm] += $obj->amount; - - if (! isset($decaiss_ttc[$obj->dm])) $decaiss_ttc[$obj->dm]=0; - $decaiss_ttc[$obj->dm] += $obj->amount; - - $i++; - } - } -} -else -{ - dol_print_error($db); + if ($modecompta == 'CREANCES-DETTES') { + $column = 'p.datev'; + } else { + $column = 'p.datep'; + } + + $subtotal_ht = 0; + $subtotal_ttc = 0; + $sql = "SELECT p.label as nom, date_format($column,'%Y-%m') as dm, sum(p.amount) as amount"; + $sql.= " FROM ".MAIN_DB_PREFIX."payment_salary as p"; + $sql.= " WHERE p.entity = ".$conf->entity; + $sql.= " GROUP BY p.label, dm"; + + dol_syslog("get social salaries payments"); + $result=$db->query($sql); + if ($result) + { + $num = $db->num_rows($result); + $var=false; + $i = 0; + if ($num) + { + while ($i < $num) + { + $obj = $db->fetch_object($result); + + if (! isset($decaiss[$obj->dm])) $decaiss[$obj->dm]=0; + $decaiss[$obj->dm] += $obj->amount; + + if (! isset($decaiss_ttc[$obj->dm])) $decaiss_ttc[$obj->dm]=0; + $decaiss_ttc[$obj->dm] += $obj->amount; + + $i++; + } + } + } + else + { + dol_print_error($db); + } } /* - * get dunning paiement -*/ -$subtotal_ht = 0; -$subtotal_ttc = 0; -$sql = "SELECT p.societe as nom, p.firstname, p.lastname, date_format(p.datedon,'%Y-%m') as dm, sum(p.amount) as amount"; -$sql.= " FROM ".MAIN_DB_PREFIX."don as p"; -$sql.= " WHERE p.entity = ".$conf->entity; -$sql.= " AND fk_statut=2"; -$sql.= " GROUP BY p.societe, p.firstname, p.lastname, dm"; - -dol_syslog("get social salaries payments"); -$result=$db->query($sql); -if ($result) + * Donation get dunning paiement + */ +if (! empty($conf->don->enabled)) { - $num = $db->num_rows($result); - $var=false; - $i = 0; - if ($num) - { - while ($i < $num) - { - $obj = $db->fetch_object($result); - - if (! isset($encaiss[$obj->dm])) $encaiss[$obj->dm]=0; - $encaiss[$obj->dm] += $obj->amount; - - if (! isset($encaiss_ttc[$obj->dm])) $encaiss_ttc[$obj->dm]=0; - $encaiss_ttc[$obj->dm] += $obj->amount; - - $i++; - } - } -} -else -{ - dol_print_error($db); + $subtotal_ht = 0; + $subtotal_ttc = 0; + $sql = "SELECT p.societe as nom, p.firstname, p.lastname, date_format(p.datedon,'%Y-%m') as dm, sum(p.amount) as amount"; + $sql.= " FROM ".MAIN_DB_PREFIX."don as p"; + $sql.= " WHERE p.entity = ".$conf->entity; + if ($modecompta == 'CREANCES-DETTES') + $sql.= " AND fk_statut in (1,2)"; + else + $sql.= " AND fk_statut=2"; + $sql.= " GROUP BY p.societe, p.firstname, p.lastname, dm"; + + dol_syslog("get donation payments"); + $result=$db->query($sql); + if ($result) + { + $num = $db->num_rows($result); + $var=false; + $i = 0; + if ($num) + { + while ($i < $num) + { + $obj = $db->fetch_object($result); + + if (! isset($encaiss[$obj->dm])) $encaiss[$obj->dm]=0; + $encaiss[$obj->dm] += $obj->amount; + + if (! isset($encaiss_ttc[$obj->dm])) $encaiss_ttc[$obj->dm]=0; + $encaiss_ttc[$obj->dm] += $obj->amount; + + $i++; + } + } + } + else + { + dol_print_error($db); + } } /* diff --git a/htdocs/langs/en_US/compta.lang b/htdocs/langs/en_US/compta.lang index 116b2c52fa8..3ae1c35562d 100644 --- a/htdocs/langs/en_US/compta.lang +++ b/htdocs/langs/en_US/compta.lang @@ -138,9 +138,9 @@ AnnualByCompaniesInputOutputMode=Balance of income and expenses, detail by third SeeReportInInputOutputMode=See report %sIncomes-Expenses%s said cash accounting for a calculation on actual payments made SeeReportInDueDebtMode=See report %sClaims-Debts%s said commitment accounting for a calculation on issued invoices RulesAmountWithTaxIncluded=- Amounts shown are with all taxes included -RulesResultDue=- It includes outstanding invoices, expenses and VAT whether they are paid or not.
- It is based on the validation date of invoices and VAT and on the due date for expenses. -RulesResultInOut=- It includes the real payments made on invoices, expenses and VAT.
- It is based on the payment dates of the invoices, expenses and VAT. -RulesCADue=- It includes the client's due invoices whether they are paid or not.
- It is based on the validation date of these invoices.
+RulesResultDue=- It includes outstanding invoices, expenses, VAT, donations whether they are paid or not. Is also includes paid salaries.
- It is based on the validation date of invoices and VAT and on the due date for expenses. For salaries defined with Salary module, the value date of payment is used. +RulesResultInOut=- It includes the real payments made on invoices, expenses, VAT and salaries.
- It is based on the payment dates of the invoices, expenses, VAT and salaries. The donation date for donation. +RulesCADue=- It includes the client's due invoices whether they are paid or not.
- It is based on the validation date of these invoices.
RulesCAIn=- It includes all the effective payments of invoices received from clients.
- It is based on the payment date of these invoices
DepositsAreNotIncluded=- Deposit invoices are nor included DepositsAreIncluded=- Deposit invoices are included diff --git a/htdocs/langs/fr_FR/compta.lang b/htdocs/langs/fr_FR/compta.lang index 544cf775e70..caf1f1135b3 100644 --- a/htdocs/langs/fr_FR/compta.lang +++ b/htdocs/langs/fr_FR/compta.lang @@ -138,8 +138,8 @@ AnnualByCompaniesInputOutputMode=Bilan des recettes et dépenses, détail par ti SeeReportInInputOutputMode=Cliquer sur %sRecettes-Dépenses%s dit comptabilité de caisse pour un calcul sur les paiements effectivement réalisés SeeReportInDueDebtMode=Cliquer sur %sCréances-Dettes%s dit comptabilité d'engagement pour un calcul sur les factures émises RulesAmountWithTaxIncluded=- Les montants affichés sont les montants taxe incluse -RulesResultDue=- Il inclut les factures, charges et tva dues, qu'elles soient payées ou non.
- Il se base sur la date de validation pour les factures et la tva et sur la date d'échéance pour les charges. -RulesResultInOut=- Il inclut les règlements effectivement réalisés pour les factures, les charges et la TVA.
- Il se base sur la date de règlement de ces factures, charges et TVA. +RulesResultDue=- Il inclut les factures, charges, tva dues, et dons qu'ils soient payées ou non.
- Il se base sur la date de validation pour les factures et la tva et sur la date d'échéance pour les charges. Pour les salaires saisis depuis le module Salaires, la date de valeur du paiement est utilisée. +RulesResultInOut=- Il inclut les règlements effectivement réalisés pour les factures, les charges, TVA et salaires.
- Il se base sur la date de règlement de ces factures, charges, TVA ou salaires. La date de don pour les dons. RulesCADue=- Il inclut les factures clients dues, qu'elles soient payées ou non.
- Il se base sur la date de validation de ces factures.
RulesCAIn=- Il inclut les règlements effectivement reçus des factures clients.
- Il se base sur la date de règlement de ces factures
DepositsAreNotIncluded=- Les factures d'acomptes ne sont pas incluses From fd29bb34be9645f2c71cd0453730005c11fe31a3 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Thu, 1 Oct 2015 16:09:04 +0200 Subject: [PATCH 03/23] FIX : Mass Mailing activity don't display all status --- htdocs/comm/mailing/list.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/htdocs/comm/mailing/list.php b/htdocs/comm/mailing/list.php index ef2e2c48bf8..093efbd6a23 100644 --- a/htdocs/comm/mailing/list.php +++ b/htdocs/comm/mailing/list.php @@ -166,8 +166,7 @@ if ($result) print ''; if ($filteremail) { - if ($obj->sendstatut==-1) print $langs->trans("MailingStatusError").' '.img_error(); - if ($obj->sendstatut==1) print $langs->trans("MailingStatusSent").' '.img_picto($langs->trans("MailingStatusSent"),'statut6'); + print $email::libStatutDest($obj->sendstatut,2); } else { From 322a2a54b830b3c492439090843d22ce1e6d3841 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 3 Oct 2015 11:34:14 +0200 Subject: [PATCH 04/23] Update printing.php --- htdocs/printing/admin/printing.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/printing/admin/printing.php b/htdocs/printing/admin/printing.php index d848b0befce..16916cad7e5 100644 --- a/htdocs/printing/admin/printing.php +++ b/htdocs/printing/admin/printing.php @@ -229,7 +229,7 @@ if ($mode == 'test' && $user->admin) $langs->load($driver); $printer = new $classname($db); //print '
'.print_r($printer, true).'
'; - if (count($printer->getlist_available_printers)) { + if (count($printer->getlist_available_printers())) { print $printer->listAvailablePrinters(); } else { From 4e5ca151b54c8ce685e79b4a668e491573103e67 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 3 Oct 2015 20:39:15 +0200 Subject: [PATCH 05/23] Make process to update launchpad easier. --- build/launchpad/README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/launchpad/README b/build/launchpad/README index b2db1d18894..7ab1b15b81c 100644 --- a/build/launchpad/README +++ b/build/launchpad/README @@ -99,7 +99,7 @@ If you want to build/test package locally: bzr branch lp:~yourlogin/+junk/debian-[dev|stable] cd debian-[dev|stable] bzr status - -- Update files here -- + -- Update files here: Remove all (except .bzr dir) and overwrite. Restore version into the file changelog -- bzr commit -m "Description of change" bzr push lp:~yourlogin/+junk/debian-[dev|stable] From 9eab5206d4e6baf8a65b61c08c47bbbf22597ac4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 4 Oct 2015 14:08:32 +0200 Subject: [PATCH 06/23] Fix typo --- build/pad/DoliWamp.pml | 2 +- build/pad/pad_doliwamp.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/pad/DoliWamp.pml b/build/pad/DoliWamp.pml index 9209bdbe061..401cff6d7a5 100644 --- a/build/pad/DoliWamp.pml +++ b/build/pad/DoliWamp.pml @@ -41,7 +41,7 @@ DoliWamp, Dolibarr ERP/CRM for Windows DoliWamp, the easy to use Dolibarr for Windows to manage your company,foundation DoliWamp is the Dolibarr ERP/CRM for Windows, the easy to use open source software to manage your activity (invoices, customers, suppliers, contracts, agenda, emailings...) and any other things a small or mid-sized business or a foundation needs. - DoliWamp is the Dolibarr ERP/CRM autoinstaller for Windows users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. Dolibarr ERP/CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations. + DoliWamp is the Dolibarr ERP/CRM autoinstaller for Windows users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. Dolibarr ERP/CRM is a software package built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations. DoliWamp is the Dolibarr ERP/CRM for Windows. Dolibarr ERP & CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations (You can manage or follow contacts, invoices, orders, commercial proposals, products, stock management, agenda, mass emailings, members of a foundation, bank accounts...). Based on a WAMP, MAMP or LAMP server (Apache, Mysql, PHP for all Operating Systems), you can install it as a standalone program or use it from anywhere with any web browser. Dolibarr is an OpenSource project. It differs from other ERP or CRM softwares (like OpenAguila, OpenBravo, OpenERP, Neogia, Compiere, etc) because everything was made to be more simple: Simple to install, Simple to use, Simple to develop. DoliWamp is the auto-installer for Windows users with no technical knowledge to install Dolibarr ERP/CRM and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. diff --git a/build/pad/pad_doliwamp.xml b/build/pad/pad_doliwamp.xml index 0da0b189113..c59a3695e5d 100644 --- a/build/pad/pad_doliwamp.xml +++ b/build/pad/pad_doliwamp.xml @@ -71,7 +71,7 @@ DoliWamp, Dolibarr ERP/CRM for Windows DoliWamp, the easy to use Dolibarr for Windows to manage your company,foundation DoliWamp is the Dolibarr ERP/CRM for Windows, the easy to use open source software to manage your activity (invoices, customers, suppliers, contracts, agenda, emailings...) and any other things a small or mid-sized business or a foundation needs. - DoliWamp is the Dolibarr ERP/CRM autoinstaller for Windows users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. Dolibarr ERP/CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations. + DoliWamp is the Dolibarr ERP/CRM autoinstaller for Windows users with no technical knowledge to install Dolibarr and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. Dolibarr ERP/CRM is a software package built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations. DoliWamp is the Dolibarr ERP/CRM for Windows. Dolibarr ERP & CRM is a software built by modules addition (you enable only features you need), to manage small or mid-sized businesses, freelancers or foundations (You can manage or follow contacts, invoices, orders, commercial proposals, products, stock management, agenda, mass emailings, members of a foundation, bank accounts...). Based on a WAMP, MAMP or LAMP server (Apache, Mysql, PHP for all Operating Systems), you can install it as a standalone program or use it from anywhere with any web browser. Dolibarr is an OpenSource project. It differs from other ERP or CRM softwares (like OpenAguila, OpenBravo, OpenERP, Neogia, Compiere, etc) because everything was made to be more simple: Simple to install, Simple to use, Simple to develop. DoliWamp is the auto-installer for Windows users with no technical knowledge to install Dolibarr ERP/CRM and all its prerequisites (Apache, Mysql, PHP) with just one auto-exe file. From 36a6a77d828071887e434de928df054439ccab63 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 4 Oct 2015 15:01:17 +0200 Subject: [PATCH 07/23] Fix missing picto for launchpad --- doc/images/dolibarr_192x192.png | Bin 0 -> 3822 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/images/dolibarr_192x192.png diff --git a/doc/images/dolibarr_192x192.png b/doc/images/dolibarr_192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..c5935d60147e275dd171e3fd2392fe0cdd57b5a4 GIT binary patch literal 3822 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 literal 0 HcmV?d00001 From 75e337e8d96a203d4b055f72e48970a67e30daf6 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 4 Oct 2015 16:02:50 +0200 Subject: [PATCH 08/23] FIX select of project using ajax autocomplete option --- htdocs/core/class/html.formprojet.class.php | 31 +++++++++++---------- htdocs/projet/ajax/projects.php | 7 +++-- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/htdocs/core/class/html.formprojet.class.php b/htdocs/core/class/html.formprojet.class.php index 25d65cc591a..5486d19858b 100644 --- a/htdocs/core/class/html.formprojet.class.php +++ b/htdocs/core/class/html.formprojet.class.php @@ -90,29 +90,30 @@ class FormProjets } /** - * Returns an array with projects qualified for a third party + * Returns an array with projects qualified for a third party * - * @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id) - * @param int $selected Id project preselected - * @param string $htmlname Nom de la zone html - * @param int $maxlength Maximum length of label - * @param int $option_only Return only html options lines without the select tag - * @param int $show_empty Add an empty line - * @param int $discard_closed Discard closed projects (0=Keep,1=hide completely,2=Disable) - * @param int $forcefocus Force focus on field (works with javascript only) - * @param int $disabled Disabled - * @param int $mode 0 for HTML mode and 1 for JSON mode - * @param string $filterkey Key to filter - * @return int Nber of project if OK, <0 if KO + * @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id) + * @param int $selected Id project preselected + * @param string $htmlname Nom de la zone html + * @param int $maxlength Maximum length of label + * @param int $option_only Return only html options lines without the select tag + * @param int $show_empty Add an empty line + * @param int $discard_closed Discard closed projects (0=Keep,1=hide completely,2=Disable) + * @param int $forcefocus Force focus on field (works with javascript only) + * @param int $disabled Disabled + * @param int $mode 0 for HTML mode and 1 for array return (to be used by json_encode for example) + * @param string $filterkey Key to filter + * @return int Nb of project if OK, <0 if KO */ - function select_projects_list($socid=-1, $selected='', $htmlname='projectid', $maxlength=24, $option_only=0, $show_empty=1, $discard_closed=0, $forcefocus=0, $disabled=0, $mode = 0, $filterkey = '') + function select_projects_list($socid=-1, $selected='', $htmlname='projectid', $maxlength=24, $option_only=0, $show_empty=1, $discard_closed=0, $forcefocus=0, $disabled=0, $mode=0, $filterkey = '') { global $user,$conf,$langs; require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; $out=''; - + $outarray=array(); + $hideunselectables = false; if (! empty($conf->global->PROJECT_HIDE_UNSELECTABLES)) $hideunselectables = true; diff --git a/htdocs/projet/ajax/projects.php b/htdocs/projet/ajax/projects.php index f7fbfbaddab..55a4597dc08 100644 --- a/htdocs/projet/ajax/projects.php +++ b/htdocs/projet/ajax/projects.php @@ -38,6 +38,7 @@ $socid=GETPOST('socid','int'); $action=GETPOST('action', 'alpha'); $id=GETPOST('id', 'int'); + /* * View */ @@ -60,9 +61,11 @@ if (! GETPOST($htmlname) && ! GETPOST($idprod)) return; // When used from jQuery, the search term is added as GET param "term". $searchkey=(GETPOST($idprod)?GETPOST($idprod):(GETPOST($htmlname)?GETPOST($htmlname):'')); + $form = new FormProjets($db); -$arrayresult=$form->select_projects_list($socid, '', $htmlname, '', 0, 0, array(), 0, 1, $searchkey); +$arrayresult=$form->select_projects_list($socid, '', $htmlname, 0, 0, 1, 0, 0, 0, 1, $searchkey); $db->close(); -print json_encode($arrayresult); \ No newline at end of file +print json_encode($arrayresult); + From d54650905bd6c880b17c7c7448253fac37e736be Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 4 Oct 2015 19:08:10 +0200 Subject: [PATCH 09/23] FIX debian install when module mysqli is not installed. --- build/debian/dolibarr.postinst | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/build/debian/dolibarr.postinst b/build/debian/dolibarr.postinst index 8a6078af377..5f61ffe2083 100644 --- a/build/debian/dolibarr.postinst +++ b/build/debian/dolibarr.postinst @@ -40,10 +40,28 @@ enable_install_upgrade_wizard() { rm -f /var/lib/dolibarr/documents/install.lock } + +php_install() { + if which php5enmod >/dev/null 2>&1 ;then + # php5endmod exists for ubuntu only + echo "Enable php module mysqli with php5enmod" + php5enmod mysqli + fi +} + apache_install() { webserver=$1 + + # Enable Apache 2 alias module + if which a2enmod >/dev/null 2>&1 ;then + echo "Enable apache module alias with a2enmod" + a2enmod alias + fi + + # Enable dolibarr conf if which a2enconf >/dev/null 2>&1 ;then # a2enconf exists for ubuntu only + echo "Enable link for Apache config file with a3enconf" a2enconf dolibarr else if [ -d /etc/$webserver/conf.d ] && [ ! -e /etc/$webserver/conf.d/dolibarr.conf ]; then @@ -88,11 +106,7 @@ case "$1" in echo This is not a first install fi - # Apache 2 setup - if which a2enmod >/dev/null 2>&1 ;then - a2enmod alias - fi - + php_install apache_install lighttpd_install From 0df42bc5eacefb3673ec80230e01942636d6d5af Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 4 Oct 2015 19:37:49 +0200 Subject: [PATCH 10/23] FIX Filter on status of thirdparty list and bad encoding of url --- htdocs/comm/prospect/list.php | 1 + htdocs/societe/list.php | 24 ++++++++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/htdocs/comm/prospect/list.php b/htdocs/comm/prospect/list.php index 5d795775eb4..7259cff218e 100644 --- a/htdocs/comm/prospect/list.php +++ b/htdocs/comm/prospect/list.php @@ -468,6 +468,7 @@ if ($resql) $reshook=$hookmanager->executeHooks('printFieldListSearch',$parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; + // Status print ''; print $form->selectarray('search_status', array('0'=>$langs->trans('ActivityCeased'),'1'=>$langs->trans('InActivity')),$search_status); print ''; diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index 281746fe824..b97fd8397d4 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -55,6 +55,7 @@ $search_categ=trim(GETPOST("search_categ")); $mode=GETPOST("mode"); $modesearch=GETPOST("mode_search"); $search_type=trim(GETPOST('search_type')); +$search_status=GETPOST("search_status",'int'); $sortfield=GETPOST("sortfield",'alpha'); $sortorder=GETPOST("sortorder",'alpha'); @@ -172,8 +173,11 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both $search_idprof3=''; $search_idprof4=''; $search_type=''; + $search_status=''; } +if ($search_status=='') $search_status=1; // always display active thirdparty first + if ($socname) { $search_nom=$socname; @@ -234,6 +238,7 @@ if ($search_idprof6) $sql .= " AND s.idprof6 LIKE '%".$db->escape($search_idpro if ($search_type > 0 && in_array($search_type,array('1,3','2,3'))) $sql .= " AND s.client IN (".$db->escape($search_type).")"; if ($search_type > 0 && in_array($search_type,array('4'))) $sql .= " AND s.fournisseur = 1"; if ($search_type == '0') $sql .= " AND s.client = 0 AND s.fournisseur = 0"; +if ($search_status!='') $sql .= " AND s.status = ".$db->escape($search_status); if (!empty($conf->barcode->enabled) && $sbarcode) $sql.= " AND s.barcode LIKE '%".$db->escape($sbarcode)."%'"; // Add where from hooks $parameters=array(); @@ -257,13 +262,14 @@ if ($resql) $num = $db->num_rows($resql); $i = 0; - $params = "&socname=".htmlspecialchars($socname)."&search_nom=".htmlspecialchars($search_nom)."&search_town=".htmlspecialchars($search_town); - $params.= ($sbarcode?"&sbarcode=".htmlspecialchars($sbarcode):""); - $params.= '&search_idprof1='.htmlspecialchars($search_idprof1); - $params.= '&search_idprof2='.htmlspecialchars($search_idprof2); - $params.= '&search_idprof3='.htmlspecialchars($search_idprof3); - $params.= '&search_idprof4='.htmlspecialchars($search_idprof4); - + $params = "&socname=".urlencode($socname)."&search_nom=".urlencode($search_nom)."&search_town=".urlencode($search_town); + $params.= ($sbarcode?"&sbarcode=".urlencode($sbarcode):""); + $params.= '&search_idprof1='.urlencode($search_idprof1); + $params.= '&search_idprof2='.urlencode($search_idprof2); + $params.= '&search_idprof3='.urlencode($search_idprof3); + $params.= '&search_idprof4='.urlencode($search_idprof4); + if ($search_status != '') $params.='&search_status='.urlencode($search_status); + print_barre_liste($title, $page, $_SERVER["PHP_SELF"],$params,$sortfield,$sortorder,'',$num,$nbtotalofrecords,'title_companies'); // Show delete result message @@ -391,7 +397,9 @@ if ($resql) print $hookmanager->resPrint; // Status - print ''; + print ''; + print $form->selectarray('search_status', array('0'=>$langs->trans('ActivityCeased'),'1'=>$langs->trans('InActivity')),$search_status); + print ''; print ''; print ''; From 780a5a199650b9b6cc1c646686f7120c910bcdf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Fri, 2 Oct 2015 13:12:35 +0200 Subject: [PATCH 11/23] Update files.lib.php --- htdocs/core/lib/files.lib.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index e49661be26f..505e8b8e665 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -1603,6 +1603,16 @@ function dol_check_secure_access_document($modulepart,$original_file,$entity,$fu $sqlprotectagainstexternals = "SELECT rowid as fk_soc FROM ".MAIN_DB_PREFIX."societe WHERE rowid='".$db->escape($refname)."' AND entity IN (".getEntity('societe', 1).")"; } + // Wrapping for contact + else if ($modulepart == 'contact') + { + if ($fuser->rights->societe->lire) + { + $accessallowed=1; + } + $original_file=$conf->societe->multidir_output[$entity].'/contact/'.$original_file; + } + // Wrapping for invoices else if ($modulepart == 'facture' || $modulepart == 'invoice') { From c2cc9711f76fa61d44120c3fea8673151209d96b Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 4 Oct 2015 20:01:08 +0200 Subject: [PATCH 12/23] FIX Thirdparty is missing on card --- htdocs/contact/document.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/htdocs/contact/document.php b/htdocs/contact/document.php index 239b1d9a6fd..81f9b2a29be 100644 --- a/htdocs/contact/document.php +++ b/htdocs/contact/document.php @@ -104,6 +104,25 @@ if ($object->id) print ''.$langs->trans("Lastname").' / '.$langs->trans("Label").''.$object->lastname.''; print ''.$langs->trans("Firstname").''.$object->firstname.''; + // Company + if (empty($conf->global->SOCIETE_DISABLE_CONTACTS)) + { + if ($object->socid > 0) + { + $objsoc = new Societe($db); + $objsoc->fetch($object->socid); + + print ''.$langs->trans("ThirdParty").''.$objsoc->getNomUrl(1).''; + } + + else + { + print ''.$langs->trans("ThirdParty").''; + print $langs->trans("ContactNotLinkedToCompany"); + print ''; + } + } + print ''.$langs->trans("NbOfAttachedFiles").''.count($filearray).''; print ''.$langs->trans("TotalSizeOfAttachedFiles").''.$totalsize.' '.$langs->trans("bytes").''; print ''; From 2bbff8bb291c3a5d4b001ded0066e363ed3523c4 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 4 Oct 2015 20:51:45 +0200 Subject: [PATCH 13/23] Remove a dir that contains only a symbolic link that point to nowhere --- test/raven/raven | 1 - 1 file changed, 1 deletion(-) delete mode 120000 test/raven/raven diff --git a/test/raven/raven b/test/raven/raven deleted file mode 120000 index 9080498f871..00000000000 --- a/test/raven/raven +++ /dev/null @@ -1 +0,0 @@ -../raven/raven/bin/raven \ No newline at end of file From b45f5039ed194d12d048986c2e260b8d42c5a732 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 5 Oct 2015 09:02:03 +0200 Subject: [PATCH 14/23] Fix syntax error --- htdocs/main.inc.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 826d4e77b2a..fcef513130f 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -163,9 +163,9 @@ if (! defined('NOSCANPOSTFORINJECTION')) } // This is to make Dolibarr working with Plesk -if (! empty($_SERVER['DOCUMENT_ROOT']) && substr($_SERVER['DOCUMENT_ROOT'], -6) !== 'htdocs') { - set_include_path($_SERVER['DOCUMENT_ROOT'] . '/htdocs'); - } +if (! empty($_SERVER['DOCUMENT_ROOT']) && substr($_SERVER['DOCUMENT_ROOT'], -6) !== 'htdocs') +{ + set_include_path($_SERVER['DOCUMENT_ROOT'] . '/htdocs'); } // Include the conf.php and functions.lib.php From 11fb52d2e3cc296fa5a5633a35301398e542388d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Mon, 5 Oct 2015 21:22:58 +0200 Subject: [PATCH 15/23] Ask for version in contributing guidelines --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a603fd242cc..d4a333d9a21 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,7 +12,8 @@ Issues are now managed on [GitHub](https://github.com/Dolibarr/dolibarr/Issues). 1. Please [use the search engine](https://help.github.com/articles/searching-issues) to check if nobody's already reported your problem. 2. [Create an issue](https://help.github.com/articles/creating-an-issue). Choose an appropriate title. Prepend appropriately with Bug or Feature Request. -3. Report with as much detail as possible ([Use screenshots or even screencasts whenever possible](https://help.github.com/articles/issue-attachments)). +4. Tell us the version you are using! +3. Write a report with as much detail as possible (Use [screenshots](https://help.github.com/articles/issue-attachments) or even screencasts and provide logging and debugging informations whenever possible). We're still figuring out how to migrate old issues to GitHub. In the meantime, they are still available at [Doliforge](https://doliforge.org/projects/dolibarr). From a5ac5b6525743fb2d3ae42a1a359a1a1fda7a915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Mon, 5 Oct 2015 21:23:54 +0200 Subject: [PATCH 16/23] Updated Transifex project link in contributing guidelines --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d4a333d9a21..1e5e61ff992 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -68,7 +68,7 @@ Translations ------------ The source language (en_US) is maintained in the repository. See the [Code](#code) section above. -All other translations are managed online at [Transifex](https://www.transifex.com/projects/p/dolibarr). +All other translations are managed online at [Transifex](https://www.transifex.com/dolibarr-association/dolibarr/). Join an existing translation team or create your own and translate into the interface. From c7c3ba7ba09ab8380f2ffc5496768408d2a86eda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Mon, 5 Oct 2015 21:24:35 +0200 Subject: [PATCH 17/23] Fixed translator documentation link in contributing guidelines --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1e5e61ff992..47f25b7a4d3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -75,7 +75,7 @@ Join an existing translation team or create your own and translate into the inte Your translations will be available in the next major release. ### Resources -[Translator documentation](http://wiki.dolibarr.org/index.php/Developer_documentation) +[Translator documentation](http://wiki.dolibarr.org/index.php/Translator_documentation) Documentation ------------- From fa64761b67b7c27e1a0ee3326007b3d7b3da1fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Mon, 5 Oct 2015 21:42:57 +0200 Subject: [PATCH 18/23] Enhanced contributing guidelines --- CONTRIBUTING.md | 50 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 47f25b7a4d3..304924fe150 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,11 +4,9 @@ How to contribute to Dolibarr Bug reports and feature requests -------------------------------- -*Note*: Issues are not a support forum. If you need help using the software, please use [the forums](http://www.dolibarr.org/forum). +*Note*: Issues are not a support forum. If you need help using the software, please use [the forums](http://www.dolibarr.org/forum). -**NEW** - -Issues are now managed on [GitHub](https://github.com/Dolibarr/dolibarr/Issues). +Issues are managed on [GitHub](https://github.com/Dolibarr/dolibarr/Issues). 1. Please [use the search engine](https://help.github.com/articles/searching-issues) to check if nobody's already reported your problem. 2. [Create an issue](https://help.github.com/articles/creating-an-issue). Choose an appropriate title. Prepend appropriately with Bug or Feature Request. @@ -42,9 +40,45 @@ Choose your base branch accordingly. ### General rules Please don't edit the ChangeLog file. A project manager will update it from your commit messages. -### Commits +### Commits Use clear commit messages with the following structure: +``` +[KEYWORD] [ISSUENUM] DESC + +LONGDESC +``` + +#### Keyword +In uppercase to appear in ChangeLog when generated. + +The keyword can be ommitted if your commit does not fit in any of the following categories: +- Fix: for a bug fix +- Close: for closing a referenced feature request +- New: for an unreferenced new feature (Opening a feature request and using close is prefered) + +#### Issuenum +If your commit fixes a referenced bug or feature request. + +In the form of a # followed by the GitHub issue number. + +#### Desc +A short description of the commit content. + +This should ideally be less than 50 characters. + +#### LongDesc +A long description of the commit content. + +You can really go to town here and explain in depth what you've been doing. + +Feel free to express technical details, use cases or anything relevant to the current commit. + +This section can span multiple lines. + +Try to keep lines under 72 characters. + +#### Samples
 FIX|Fix #456 Short description (where #456 is number of bug fix, if it exists. In upper case to appear into ChangeLog)
 or
@@ -58,8 +92,10 @@ Long description (Can span accross multiple lines).
 
### Pull Requests -When submitting a pull request, use same rule than Commits. With upper case keyword to appear into ChangeLog. +When submitting a pull request, use same rule as [Commits](#commits) for the message. +If your pull request only contains one commit, GitHub will be smart enough to fill it for you. +Otherwise, please be a bit verbose about what you're providing. ### Resources [Developer documentation](http://wiki.dolibarr.org/index.php/Developer_documentation) @@ -81,5 +117,5 @@ Documentation ------------- The project's documentation is maintained on the [Wiki](http://wiki.dolibarr.org/index.php). -*You need to create an account before being able to edit.* +*Note*: to help prevent spam, you need to create an account before being able to edit. From f54a1ca367d5426fc3f1fa24f8f7ed398e2848d3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 6 Oct 2015 01:03:31 +0200 Subject: [PATCH 19/23] CSS enhancement --- dev/skeletons/skeleton_page.php | 4 ++-- htdocs/adherents/list.php | 4 ++-- htdocs/comm/list.php | 4 ++-- htdocs/comm/prospect/list.php | 4 ++-- htdocs/commande/list.php | 5 ++--- htdocs/compta/bank/search.php | 4 ++-- htdocs/contact/list.php | 21 +++++++++++---------- htdocs/fourn/list.php | 4 ++-- htdocs/projet/list.php | 2 +- htdocs/projet/tasks/index.php | 4 ++-- htdocs/societe/list.php | 4 ++-- htdocs/theme/eldy/style.css.php | 4 ++-- 12 files changed, 32 insertions(+), 32 deletions(-) diff --git a/dev/skeletons/skeleton_page.php b/dev/skeletons/skeleton_page.php index 0eb3b01589c..c1e12c2f93c 100644 --- a/dev/skeletons/skeleton_page.php +++ b/dev/skeletons/skeleton_page.php @@ -282,7 +282,7 @@ if ($action == 'list' || (empty($id) && $action != 'create')) if (! empty($moreforfilter)) { - print '
'; + print '
'; print $moreforfilter; $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook @@ -290,7 +290,7 @@ if ($action == 'list' || (empty($id) && $action != 'create')) print '
'; } - print ''."\n"; + print '
'."\n"; // Fields title print ''; diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php index 4ffbbf33fb6..2f495e60bf7 100644 --- a/htdocs/adherents/list.php +++ b/htdocs/adherents/list.php @@ -201,7 +201,7 @@ if ($resql) } if (! empty($moreforfilter)) { - print '
'; + print '
'; print $moreforfilter; $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook @@ -209,7 +209,7 @@ if ($resql) print '
'; } - print "
"; + print '
'; print ''; print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"d.rowid",$param,"","",$sortfield,$sortorder); print_liste_field_titre($langs->trans("Name")." / ".$langs->trans("Company"),$_SERVER["PHP_SELF"],"d.lastname",$param,"","",$sortfield,$sortorder); diff --git a/htdocs/comm/list.php b/htdocs/comm/list.php index 91f30d30887..3147240167e 100644 --- a/htdocs/comm/list.php +++ b/htdocs/comm/list.php @@ -205,7 +205,7 @@ if ($result) } if ($moreforfilter) { - print '
'; + print '
'; print $moreforfilter; $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook @@ -213,7 +213,7 @@ if ($result) print '
'; } - print '
'."\n"; + print '
'."\n"; print ''; print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder); diff --git a/htdocs/comm/prospect/list.php b/htdocs/comm/prospect/list.php index f629aafef29..e4d10e3396c 100644 --- a/htdocs/comm/prospect/list.php +++ b/htdocs/comm/prospect/list.php @@ -371,7 +371,7 @@ if ($resql) } if ($moreforfilter) { - print '
'; + print '
'; print $moreforfilter; $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook @@ -379,7 +379,7 @@ if ($resql) print '
'; } - print '
'; + print '
'; print ''; print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$param,'',$sortfield,$sortorder); diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index dfe5fab1217..c4ea9cbf838 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -262,8 +262,6 @@ if ($resql) if ($optioncss != '') print ''; print ''; - print '
'; - $moreforfilter=''; // If the user can view prospects other than his' @@ -295,7 +293,7 @@ if ($resql) } if (! empty($moreforfilter)) { - print '
'; + print '
'; print $moreforfilter; $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook @@ -303,6 +301,7 @@ if ($resql) print '
'; } + print '
'; print ''; print_liste_field_titre($langs->trans('Ref'),$_SERVER["PHP_SELF"],'c.ref','',$param,'width="25%"',$sortfield,$sortorder); print_liste_field_titre($langs->trans('RefCustomerOrder'),$_SERVER["PHP_SELF"],'c.ref_client','',$param,'',$sortfield,$sortorder); diff --git a/htdocs/compta/bank/search.php b/htdocs/compta/bank/search.php index 80befe3d433..b585f48565f 100644 --- a/htdocs/compta/bank/search.php +++ b/htdocs/compta/bank/search.php @@ -186,12 +186,12 @@ if ($resql) if ($moreforfilter) { - print '
'; + print '
'; print $moreforfilter; print '
'."\n"; } - print '
'."\n"; + print '
'."\n"; print ''; print_liste_field_titre($langs->trans('Ref'),$_SERVER['PHP_SELF'],'b.rowid','',$param,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans('DateOperationShort'),$_SERVER['PHP_SELF'],'b.dateo','',$param,'align="center"',$sortfield,$sortorder); diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 300a06acca6..649179c1082 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -276,6 +276,15 @@ if ($result) print ''; print ''; + if ($sall) + { + print $langs->trans("Filter")." (".$langs->trans("Lastname").", ".$langs->trans("Firstname").", ".$langs->trans("ThirdParty")." ".$langs->trans("or")." ".$langs->trans("EMail")."): ".$sall; + } + if ($search_firstlast_only) + { + print $langs->trans("Filter")." (".$langs->trans("Lastname").", ".$langs->trans("Firstname")."): ".$search_firstlast_only; + } + if (! empty($conf->categorie->enabled)) { require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; @@ -285,20 +294,12 @@ if ($result) } if ($moreforfilter) { - print '
'; + print '
'; print $moreforfilter; print '
'; } - if ($sall) - { - print $langs->trans("Filter")." (".$langs->trans("Lastname").", ".$langs->trans("Firstname").", ".$langs->trans("ThirdParty")." ".$langs->trans("or")." ".$langs->trans("EMail")."): ".$sall; - } - if ($search_firstlast_only) - { - print $langs->trans("Filter")." (".$langs->trans("Lastname").", ".$langs->trans("Firstname")."): ".$search_firstlast_only; - } - print '
'; + print '
'; // Ligne des titres print ''; diff --git a/htdocs/fourn/list.php b/htdocs/fourn/list.php index 14bd6298ea8..d3edf06f1cb 100644 --- a/htdocs/fourn/list.php +++ b/htdocs/fourn/list.php @@ -201,7 +201,7 @@ if ($resql) } if ($moreforfilter) { - print '
'; + print '
'; print $moreforfilter; $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook @@ -209,7 +209,7 @@ if ($resql) print '
'; } - print '
'; + print '
'; print ''; print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$param,'valign="middle"',$sortfield,$sortorder); diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index f46c6562ae7..8e98bf9e93f 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -281,7 +281,7 @@ if ($resql) print ''; } - print '
'; + print '
'; print ''; print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"p.ref","",$param,"",$sortfield,$sortorder); diff --git a/htdocs/projet/tasks/index.php b/htdocs/projet/tasks/index.php index 22b53d9f61c..082fbdd8d7b 100644 --- a/htdocs/projet/tasks/index.php +++ b/htdocs/projet/tasks/index.php @@ -115,7 +115,6 @@ $tasksrole=($mine ? $taskstatic->getUserRolesForProjectsOrTasks(0,$user,$project print ''; print ''; -print '
'; // If the user can view users if ($user->rights->user->user->lire) @@ -134,7 +133,7 @@ if ($user->rights->user->user->lire) } if (! empty($moreforfilter)) { - print '
'; + print '
'; print $moreforfilter; $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook @@ -142,6 +141,7 @@ if (! empty($moreforfilter)) print '
'; } +print '
'; print ''; print ''; print ''; diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index 39b625547b9..45881d20d36 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -341,7 +341,7 @@ if ($resql) */ if (! empty($moreforfilter)) { - print '
'; + print '
'; print $moreforfilter; $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook @@ -349,7 +349,7 @@ if ($resql) print '
'; } - print '
'.$langs->trans("Project").''.$langs->trans("ProjectStatus").'
'; + print '
'; // Lines of titles print ''; diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index c7bb3e0fb91..d00731dce94 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -2014,11 +2014,11 @@ table.liste { width: 100%; border-collapse: collapse; - border-top-color: #FEFEFE; - +/* border-top-color: #FEFEFE; border-top-width: 1px; border-top-color: #CCC; border-top-style: solid; +*/ border-right-width: 1px; border-right-color: #CCC; From 8d47a307bb1b00a67c70b174f5e9e1e1fddb96b8 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 6 Oct 2015 21:44:41 +0200 Subject: [PATCH 20/23] Better use of space --- htdocs/comm/list.php | 2 +- htdocs/comm/prospect/list.php | 6 +++--- htdocs/core/class/html.form.class.php | 5 +++-- htdocs/fourn/list.php | 4 ++-- htdocs/langs/en_US/admin.lang | 2 +- htdocs/langs/en_US/companies.lang | 1 + htdocs/societe/list.php | 8 ++++---- 7 files changed, 15 insertions(+), 13 deletions(-) diff --git a/htdocs/comm/list.php b/htdocs/comm/list.php index 3147240167e..fcc1783daf5 100644 --- a/htdocs/comm/list.php +++ b/htdocs/comm/list.php @@ -246,7 +246,7 @@ if ($result) print ''; print ''; print ''; print ''; print ''; print ''; // Prospect level diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 8d69e58bad3..0d4bff05d42 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -484,9 +484,10 @@ class Form * @param string $htmlname Name of html select object * @param string $htmloption Options html on select object * @param integer $maxlength Max length for labels (0=no limit) + * @param string $morecss More css class * @return string HTML string with select */ - function select_country($selected='',$htmlname='country_id',$htmloption='',$maxlength=0) + function select_country($selected='',$htmlname='country_id',$htmloption='',$maxlength=0,$morecss='minwidth300') { global $conf,$langs; @@ -507,7 +508,7 @@ class Form $resql=$this->db->query($sql); if ($resql) { - $out.= ''; $num = $this->db->num_rows($resql); $i = 0; if ($num) diff --git a/htdocs/fourn/list.php b/htdocs/fourn/list.php index d3edf06f1cb..5693031c630 100644 --- a/htdocs/fourn/list.php +++ b/htdocs/fourn/list.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2012 Laurent Destailleur + * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2011 Philippe Grand * Copyright (C) 2013 Cédric Salvador @@ -238,7 +238,7 @@ if ($resql) print ''; print ''; print ''; // Barcode if (! empty($conf->barcode->enabled)) @@ -387,11 +387,11 @@ if ($resql) } // Town print ''; //Country print ''; //Company type print '"; - //if ($oldfamily && $family!=$oldfamily && $atleastoneforfamily) { - if ($family!=$oldfamily) + //print ""; + //if ($oldfamily && $familykey!=$oldfamily && $atleastoneforfamily) { + if ($familykey!=$oldfamily) { print ''."\n"; print '\n"; print ''."\n"; print "\n"; $atleastoneforfamily=0; - //print ""; + //print ""; } $atleastoneforfamily++; - if ($family!=$oldfamily) + if ($familykey!=$oldfamily) { - $familytext=empty($familylib[$family])?$family:$familylib[$family]; - //print $familytext; - $oldfamily=$family; + $familytext=empty($familyinfo[$familykey]['label'])?$familykey:$familyinfo[$familykey]['label']; + $oldfamily=$familykey; } $var=!$var; diff --git a/htdocs/core/modules/DolibarrModules.class.php b/htdocs/core/modules/DolibarrModules.class.php index c059ff7c2cc..b8d4df05e92 100644 --- a/htdocs/core/modules/DolibarrModules.class.php +++ b/htdocs/core/modules/DolibarrModules.class.php @@ -35,17 +35,20 @@ class DolibarrModules // Can not be abstract, because we need to instantiant it into unActivateModule to be able to disable a module whose files were removed. { /** + * @var int Module unique ID + */ + public $numero; + + /** + * @var string Module name + */ + public $name; + + /** * @var DoliDb Database handler */ public $db; - /** - * @var string Relative path to module style sheet - * @deprecated - * @see module_parts - */ - public $style_sheet = ''; - /** * @var array Paths to create when module is activated */ @@ -134,16 +137,6 @@ class DolibarrModules // Can not be abstract, because we need to insta */ public $error; - /** - * @var int Module unique ID - */ - public $numero; - - /** - * @var string Module name - */ - public $name; - /** * @var string Module version */ @@ -193,7 +186,15 @@ class DolibarrModules // Can not be abstract, because we need to insta * @var bool Module is enabled globally (Multicompany support) */ public $core_enabled; + + /** + * @var string Relative path to module style sheet + * @deprecated + * @see module_parts + */ + public $style_sheet = ''; + /** * Constructor. Define names, constants, directories, boxes, permissions @@ -470,6 +471,7 @@ class DolibarrModules // Can not be abstract, because we need to insta if ($this->version == 'dolibarr' || $this->version == 'dolibarr_deprecated') return 'core'; if (! empty($this->version) && ! in_array($this->version,array('experimental','development'))) return 'external'; if (! empty($this->editor_name) || ! empty($this->editor_web)) return 'external'; + if ($this->numero >= 100000) return 'external'; return 'unknown'; } diff --git a/htdocs/core/modules/modCashDesk.class.php b/htdocs/core/modules/modCashDesk.class.php index a76531cd719..430d62146f5 100644 --- a/htdocs/core/modules/modCashDesk.class.php +++ b/htdocs/core/modules/modCashDesk.class.php @@ -45,7 +45,7 @@ class modCashDesk extends DolibarrModules // Key text used to identify module (for permission, menus, etc...) $this->rights_class = 'cashdesk'; - $this->family = "products"; + $this->family = "portal"; // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) $this->name = preg_replace('/^mod/i','',get_class($this)); $this->description = "CashDesk module"; diff --git a/htdocs/core/modules/modLabel.class.php b/htdocs/core/modules/modLabel.class.php index 54f65a83591..0b282584261 100644 --- a/htdocs/core/modules/modLabel.class.php +++ b/htdocs/core/modules/modLabel.class.php @@ -43,7 +43,7 @@ class modLabel extends DolibarrModules $this->db = $db; $this->numero = 60; - $this->family = "other"; + $this->family = "technic"; // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) $this->name = preg_replace('/^mod/i','',get_class($this)); $this->description = "Gestion des etiquettes"; diff --git a/htdocs/core/modules/modUser.class.php b/htdocs/core/modules/modUser.class.php index 8c510186f06..d3be64d0560 100644 --- a/htdocs/core/modules/modUser.class.php +++ b/htdocs/core/modules/modUser.class.php @@ -45,7 +45,7 @@ class modUser extends DolibarrModules $this->db = $db; $this->numero = 0; - $this->family = "base"; // Family for module (or "base" if core module) + $this->family = "hr"; // Family for module (or "base" if core module) // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) $this->name = preg_replace('/^mod/i','',get_class($this)); $this->description = "Gestion des utilisateurs (requis)"; diff --git a/htdocs/core/modules/modSyncSupplierWebServices.class.php b/htdocs/core/modules/modWebServicesClient.class.php similarity index 94% rename from htdocs/core/modules/modSyncSupplierWebServices.class.php rename to htdocs/core/modules/modWebServicesClient.class.php index 96403f67ee4..dd13d8920db 100644 --- a/htdocs/core/modules/modSyncSupplierWebServices.class.php +++ b/htdocs/core/modules/modWebServicesClient.class.php @@ -27,7 +27,7 @@ include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php'; /** * Class to describe a sync supplier web services module */ -class modSyncSupplierWebServices extends DolibarrModules +class modWebServicesClient extends DolibarrModules { /** @@ -38,12 +38,12 @@ class modSyncSupplierWebServices extends DolibarrModules function __construct($db) { $this->db = $db; - $this->numero = 2650; + $this->numero = 2660; $this->family = "technic"; // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) $this->name = preg_replace('/^mod/i','',get_class($this)); - $this->description = "Enable the client for external supplier web services"; + $this->description = "Enable the web service client to call external supplier web services"; $this->version = 'experimental'; // 'experimental' or 'dolibarr' or version // Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase) $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name); diff --git a/htdocs/core/modules/modWebsite.class.php b/htdocs/core/modules/modWebsite.class.php new file mode 100644 index 00000000000..0e75daa26bd --- /dev/null +++ b/htdocs/core/modules/modWebsite.class.php @@ -0,0 +1,124 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \defgroup website Module website + * \brief Website module descriptor. + * \file htdocs/core/modules/modWebsite.class.php + * \ingroup website + * \brief Description and activation file for module Website + */ +include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php'; + + +/** + * Class to describe Website module + */ +class modWebsite extends DolibarrModules +{ + + /** + * Constructor. Define names, constants, directories, boxes, permissions + * + * @param DoliDB $db Database handler + */ + function __construct($db) + { + global $langs,$conf; + + $this->db = $db; + $this->numero = 10000; + + // Family can be 'crm','financial','hr','projects','products','ecm','technic','other' + // It is used to group modules in module setup page + $this->family = "portal"; + // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) + $this->name = preg_replace('/^mod/i','',get_class($this)); + $this->description = "Enable the public website with CMS features"; + $this->version = 'development'; // 'experimental' or 'dolibarr' or version + // Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase) + $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name); + // Where to store the module in setup page (0=common,1=interface,2=others,3=very specific) + $this->special = 0; + // Name of image file used for this module. + $this->picto='globe'; + + // Data directories to create when module is enabled + $this->dirs = array(); + + // Config pages + //------------- + $this->config_page_url = array("website.php"); + + // Dependancies + //------------- + $this->hidden = ! empty($conf->global->WEBSITE_MODULE_DISABLED); // A condition to disable module + $this->depends = array(); // List of modules id that must be enabled if this module is enabled + $this->requiredby = array(); // List of modules id to disable if this one is disabled + $this->conflictwith = array(); // List of modules id this module is in conflict with + $this->langfiles = array("website"); + + // Constants + //----------- + $this->const = array(); + + // New pages on tabs + // ----------------- + $this->tabs = array(); + + // Boxes + //------ + $this->boxes = array(); + + // Permissions + $this->rights = array(); // Permission array used by this module + $this->rights_class = 'website'; + $r=0; + + $this->rights[$r][0] = 10001; + $this->rights[$r][1] = 'Read website content'; + $this->rights[$r][3] = 1; + $this->rights[$r][4] = 'read'; + $r++; + + $this->rights[$r][0] = 10002; + $this->rights[$r][1] = 'Create/modify website content'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'create'; + $r++; + + $this->rights[$r][0] = 10003; + $this->rights[$r][1] = 'Delete website content'; + $this->rights[$r][3] = 0; + $this->rights[$r][4] = 'delete'; + $r++; + + // Main menu entries + $r=0; + $this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=home', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode + 'type'=>'top', // This is a Left menu entry + 'titre'=>'Website', + 'url'=>'/website/index.php', + 'langs'=>'website', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'position'=>100, + 'enabled'=>'$conf->website->enabled', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. + 'perms'=>'$user->rights->website->read', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules + 'target'=>'', + 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both + $r++; + } +} diff --git a/htdocs/cron/list.php b/htdocs/cron/list.php index 1f4e5126ed0..dd02db53bc8 100644 --- a/htdocs/cron/list.php +++ b/htdocs/cron/list.php @@ -197,9 +197,7 @@ print ''; print ''; print ''; @@ -294,7 +292,7 @@ if (count($object->lines) > 0) print yn($line->status); print ''; - print '
'; - print $form->select_country($search_country,'search_country'); + print $form->select_country($search_country,'search_country','',0,'maxwidth100'); print ''; diff --git a/htdocs/comm/prospect/list.php b/htdocs/comm/prospect/list.php index e4d10e3396c..670d170de97 100644 --- a/htdocs/comm/prospect/list.php +++ b/htdocs/comm/prospect/list.php @@ -385,7 +385,7 @@ if ($resql) print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$param,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Zip"),$_SERVER["PHP_SELF"],"s.zip","",$param,"",$sortfield,$sortorder); print_liste_field_titre($langs->trans("Town"),$_SERVER["PHP_SELF"],"s.town","",$param,"",$sortfield,$sortorder); - print_liste_field_titre($langs->trans("State"),$_SERVER["PHP_SELF"],"s.fk_departement","",$param,'align="center"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("StateShort"),$_SERVER["PHP_SELF"],"s.fk_departement","",$param,'align="center"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Country"),$_SERVER["PHP_SELF"],"country.code_iso","",$param,'align="center"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("ThirdPartyType"),$_SERVER["PHP_SELF"],"typent.code","",$param,'align="center"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("DateCreation"),$_SERVER["PHP_SELF"],"s.datec","",$param,'align="center"',$sortfield,$sortorder); @@ -427,13 +427,13 @@ if ($resql) print ''; print ''; - print $form->select_country($search_country,'search_country'); + print $form->select_country($search_country,'search_country','',0,'maxwidth100'); print ''; print $form->selectarray("search_type_thirdparty", $formcompany->typent_array(0), $search_type_thirdparty, 0, 0, 0, '', 0, 0, 0, (empty($conf->global->SOCIETE_SORT_ON_TYPEENT)?'ASC':$conf->global->SOCIETE_SORT_ON_TYPEENT)); print ''; - print ''; + print ''; print ''; - print $form->select_country($search_country,'search_country'); + print $form->select_country($search_country,'search_country','',0,'maxwidth100'); print ''; diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index e06553afd89..508a4dceee7 100755 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -802,7 +802,7 @@ Permission59003=Read every user margin DictionaryCompanyType=Thirdparties type DictionaryCompanyJuridicalType=Juridical kinds of thirdparties DictionaryProspectLevel=Prospect potential level -DictionaryCanton=State/Cantons +DictionaryCanton=State/Province DictionaryRegion=Regions DictionaryCountry=Countries DictionaryCurrency=Currencies diff --git a/htdocs/langs/en_US/companies.lang b/htdocs/langs/en_US/companies.lang index 3bd16069036..a73ed322cba 100644 --- a/htdocs/langs/en_US/companies.lang +++ b/htdocs/langs/en_US/companies.lang @@ -64,6 +64,7 @@ UserTitle=Title Surname=Surname/Pseudo Address=Address State=State/Province +StateShort=State Region=Region Country=Country CountryCode=Country code diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index 45881d20d36..a5792642a64 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -195,7 +195,7 @@ if ($socname) /* - * Mode Liste + * Mode List */ /* REM: Regle sur droits "Voir tous les clients" @@ -376,7 +376,7 @@ if ($resql) print ''; print ''; if (! empty($search_nom_only) && empty($search_nom)) $search_nom=$search_nom_only; - print ''; + print ''; print ''; - print ''; + print ''; print ''; - print $form->select_country($search_country,'search_country'); + print $form->select_country($search_country,'search_country','',0,'maxwidth100'); print ''; From 4b103ba8ce6c2da955ab8ecb17258b5ba0f52b40 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 7 Oct 2015 07:57:09 +0200 Subject: [PATCH 21/23] Work on a better way to manage modules. All one page. Introduce a way to choose order of modules family. We should also be able to introduce filters. --- htdocs/admin/modules.php | 91 +++++++------ htdocs/core/modules/DolibarrModules.class.php | 36 ++--- htdocs/core/modules/modCashDesk.class.php | 2 +- htdocs/core/modules/modLabel.class.php | 2 +- htdocs/core/modules/modUser.class.php | 2 +- ...ass.php => modWebServicesClient.class.php} | 6 +- htdocs/core/modules/modWebsite.class.php | 124 ++++++++++++++++++ htdocs/cron/list.php | 4 +- htdocs/install/mysql/data/llx_const.sql | 2 +- htdocs/langs/en_US/admin.lang | 15 ++- 10 files changed, 211 insertions(+), 73 deletions(-) rename htdocs/core/modules/{modSyncSupplierWebServices.class.php => modWebServicesClient.class.php} (94%) create mode 100644 htdocs/core/modules/modWebsite.class.php diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index cf974990f01..6530e41c3c1 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -43,6 +43,21 @@ if (! $user->admin) $specialtostring=array(0=>'common', 1=>'interfaces', 2=>'other', 3=>'functional', 4=>'marketplace'); +$familyinfo=array( + 'hr'=>array('position'=>'001', 'label'=>$langs->trans("ModuleFamilyHr")), + 'crm'=>array('position'=>'006', 'label'=>$langs->trans("ModuleFamilyCrm")), + 'financial'=>array('position'=>'009', 'label'=>$langs->trans("ModuleFamilyFinancial")), + 'products'=>array('position'=>'012', 'label'=>$langs->trans("ModuleFamilyProducts")), + 'projects'=>array('position'=>'015', 'label'=>$langs->trans("ModuleFamilyProjects")), + 'ecm'=>array('position'=>'018', 'label'=>$langs->trans("ModuleFamilyECM")), + 'technic'=>array('position'=>'021', 'label'=>$langs->trans("ModuleFamilyTechnic")), + 'portal'=>array('position'=>'040', 'label'=>$langs->trans("ModuleFamilyPortal")), + 'interface'=>array('position'=>'050', 'label'=>$langs->trans("ModuleFamilyInterface")), + 'base'=>array('position'=>'060', 'label'=>$langs->trans("ModuleFamilyBase")), + 'other'=>array('position'=>'100', 'label'=>$langs->trans("ModuleFamilyOther")), +); + + /* * Actions @@ -124,22 +139,20 @@ foreach ($modulesdir as $dir) $objMod = new $modName($db); $modNameLoaded[$modName]=$dir; - if ($objMod->numero > 0) + if (! $objMod->numero > 0) { - $j = $objMod->numero; + dol_syslog('a module descriptor must have a numero property', LOG_ERR); } - else - { - $j = 1000 + $i; - } - + $j = $objMod->numero; + $modulequalified=1; // We discard modules according to features level (PS: if module is activated we always show it) $const_name = 'MAIN_MODULE_'.strtoupper(preg_replace('/^mod/i','',get_class($objMod))); if ($objMod->version == 'development' && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL < 2))) $modulequalified=0; if ($objMod->version == 'experimental' && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL < 1))) $modulequalified=0; - // We discard modules according to property disabled + if (preg_match('/deprecated/', $objMod->version) && (empty($conf->global->$const_name) && ($conf->global->MAIN_FEATURES_LEVEL >= 0))) $modulequalified=0; + // We discard modules according to property disabled if (! empty($objMod->hidden)) $modulequalified=false; // Define array $categ with categ with at least one qualified module @@ -147,13 +160,19 @@ foreach ($modulesdir as $dir) { $modules[$i] = $objMod; $filename[$i]= $modName; - $orders[$i] = $objMod->family."_".$j; // Sort by family, then by module number + + $special = $objMod->special; + $familykey = $objMod->family; + + if ($special == 1) $familykey='interface'; + + $orders[$i] = $familyinfo[$familykey]['position']."_".$familykey."_".$j; // Sort by family, then by module number $dirmod[$i] = $dir; // Set categ[$i] - $special = isset($specialtostring[$objMod->special])?$specialtostring[$objMod->special]:'unknown'; - if ($objMod->version == 'development' || $objMod->version == 'experimental') $special='expdev'; - if (isset($categ[$special])) $categ[$special]++; // Array of all different modules categories - else $categ[$special]=1; + $specialstring = isset($specialtostring[$special])?$specialtostring[$special]:'unknown'; + if ($objMod->version == 'development' || $objMod->version == 'experimental') $specialstring='expdev'; + if (isset($categ[$specialstring])) $categ[$specialstring]++; // Array of all different modules categories + else $categ[$specialstring]=1; $j++; $i++; } @@ -197,9 +216,9 @@ print load_fiche_titre($langs->trans("ModulesSetup"),$moreinfo,'title_setup'); // Start to show page if (empty($mode)) $mode='common'; if ($mode==='common') print $langs->trans("ModulesDesc")."
\n"; -if ($mode==='other') print $langs->trans("ModulesSpecialDesc")."
\n"; -if ($mode==='interfaces') print $langs->trans("ModulesInterfaceDesc")."
\n"; -if ($mode==='functional') print $langs->trans("ModulesJobDesc")."
\n"; +//if ($mode==='other') print $langs->trans("ModulesSpecialDesc")."
\n"; +//if ($mode==='interfaces') print $langs->trans("ModulesInterfaceDesc")."
\n"; +//if ($mode==='functional') print $langs->trans("ModulesJobDesc")."
\n"; if ($mode==='marketplace') print $langs->trans("ModulesMarketPlaceDesc")."
\n"; if ($mode==='expdev') print $langs->trans("ModuleFamilyExperimental")."
\n"; @@ -213,11 +232,12 @@ $categidx='common'; // Main if (! empty($categ[$categidx])) { $head[$h][0] = DOL_URL_ROOT."/admin/modules.php?mode=".$categidx; - $head[$h][1] = $langs->trans("ModulesCommon"); + $head[$h][1] = $langs->trans("AvailableModules"); $head[$h][2] = 'common'; $h++; } +/* $categidx='other'; // Other if (! empty($categ[$categidx])) { @@ -244,6 +264,7 @@ if (! empty($categ[$categidx])) $head[$h][2] = 'functional'; $h++; } +*/ $categidx='expdev'; if (! empty($categ[$categidx])) @@ -287,28 +308,19 @@ if ($mode != 'marketplace') $oldfamily=''; - $familylib=array( - 'base'=>$langs->trans("ModuleFamilyBase"), - 'crm'=>$langs->trans("ModuleFamilyCrm"), - 'products'=>$langs->trans("ModuleFamilyProducts"), - 'hr'=>$langs->trans("ModuleFamilyHr"), - 'projects'=>$langs->trans("ModuleFamilyProjects"), - 'financial'=>$langs->trans("ModuleFamilyFinancial"), - 'ecm'=>$langs->trans("ModuleFamilyECM"), - 'technic'=>$langs->trans("ModuleFamilyTechnic"), - 'other'=>$langs->trans("ModuleFamilyOther") - ); - foreach ($orders as $key => $value) { $tab=explode('_',$value); - $family=$tab[0]; $numero=$tab[1]; + $familypos=$tab[0]; $familykey=$tab[1]; $numero=$tab[2]; $modName = $filename[$key]; $objMod = $modules[$key]; + $special = $objMod->special; + //print $objMod->name." - ".$key." - ".$objMod->special.' - '.$objMod->version."
"; - if (($mode != (isset($specialtostring[$objMod->special])?$specialtostring[$objMod->special]:'unknown') && $mode != 'expdev') + //if (($mode != (isset($specialtostring[$special])?$specialtostring[$special]:'unknown') && $mode != 'expdev') + if (($special >= 4 && $mode != 'expdev') || ($mode == 'expdev' && $objMod->version != 'development' && $objMod->version != 'experimental')) continue; // Discard if not for current tab if (! $objMod->getName()) @@ -329,28 +341,27 @@ if ($mode != 'marketplace') } // Print a separator if we change family - //print "
xx".$oldfamily."-".$family."-".$atleastoneforfamily."
xx".$oldfamily."-".$familykey."-".$atleastoneforfamily."
'; - $familytext=empty($familylib[$family])?$family:$familylib[$family]; + $familytext=empty($familyinfo[$familykey]['label'])?$familykey:$familyinfo[$familykey]['label']; print $familytext; print "'.$langs->trans("SetupShort").'
yy".$oldfamily."-".$family."-".$atleastoneforfamily."
yy".$oldfamily."-".$familykey."-".$atleastoneforfamily."
 '; print $form->selectarray('status', array('0'=>$langs->trans("No"),'1'=>$langs->trans("Yes")), $status, 1); print ''; -print ' '; print ''; -print '  '; print ''; print '
'; + print ''; if ($user->rights->cron->delete) { print "id."&status=".$status."&action=delete\" title=\"".dol_escape_htmltag($langs->trans('CronDelete'))."\">".img_picto($langs->trans('CronDelete'),'delete')."  "; diff --git a/htdocs/install/mysql/data/llx_const.sql b/htdocs/install/mysql/data/llx_const.sql index 13604638f01..2c25765223e 100644 --- a/htdocs/install/mysql/data/llx_const.sql +++ b/htdocs/install/mysql/data/llx_const.sql @@ -32,7 +32,7 @@ -- Visible in misc page insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_NOT_INSTALLED','1','chaine','Setup is running',1,0); -insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_FEATURES_LEVEL','0','chaine','Level of features to show (0=stable only, 1=stable+experimental, 2=stable+experimental+development',1,0); +insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_FEATURES_LEVEL','0','chaine','Level of features to show: -1=stable+deprecated, 0=stable only (default), 1=stable+experimental, 2=stable+experimental+development',1,0); insert into llx_const (name, value, type, note, visible, entity) values ('MAILING_LIMIT_SENDBYWEB','25','chaine','Number of targets to defined packet size when sending mass email',1,0); -- Hidden and common to all entities diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index 508a4dceee7..fec9f4876e1 100755 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -285,14 +285,16 @@ ModuleSetup=Module setup ModulesSetup=Modules setup ModuleFamilyBase=System ModuleFamilyCrm=Customer Relation Management (CRM) -ModuleFamilyProducts=Products Management -ModuleFamilyHr=Human Resource Management +ModuleFamilyProducts=Products Management (PM) +ModuleFamilyHr=Human Resource Management (HR) ModuleFamilyProjects=Projects/Collaborative work ModuleFamilyOther=Other ModuleFamilyTechnic=Multi-modules tools ModuleFamilyExperimental=Experimental modules ModuleFamilyFinancial=Financial Modules (Accounting/Treasury) ModuleFamilyECM=Electronic Content Management (ECM) +ModuleFamilyPortal=Web sites and other frontal application +ModuleFamilyInterface=Interfaces with external systems MenuHandlers=Menu handlers MenuAdmin=Menu editor DoNotUseInProduction=Do not use in production @@ -524,12 +526,12 @@ Module2400Name=Agenda Module2400Desc=Events/tasks and agenda management Module2500Name=Electronic Content Management Module2500Desc=Save and share documents -Module2600Name=API services (Web services SOAP) +Module2600Name=API/Web services (SOAP server) Module2600Desc=Enable the Dolibarr SOAP server providing API services -Module2610Name=API services (Web services REST) +Module2610Name=API/Web services (REST server) Module2610Desc=Enable the Dolibarr REST server providing API services -Module2650Name=WebServices (client) -Module2650Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment) +Module2660Name=Call WebServices (SOAP client) +Module2660Desc=Enable the Dolibarr web services client (Can be used to push data/requests to external servers. Supplier orders supported only for the moment) Module2700Name=Gravatar Module2700Desc=Use online Gravatar service (www.gravatar.com) to show photo of users/members (found with their emails). Need an internet access Module2800Desc=FTP Client @@ -1001,6 +1003,7 @@ SystemAreaForAdminOnly=This area is available for administrator users only. None CompanyFundationDesc=Edit on this page all known information of the company or foundation you need to manage (For this, click on "Modify" button at bottom of page) DisplayDesc=You can choose each parameter related to the Dolibarr look and feel here AvailableModules=Available modules +DeprecatedModules=Deprecated modules ToActivateModule=To activate modules, go on setup Area (Home->Setup->Modules). SessionTimeOut=Time out for session SessionExplanation=This number guarantee that session will never expire before this delay, if the session cleaner is done by Internal PHP session cleaner (and nothing else). Internal PHP session cleaner does not guaranty that session will expire just after this delay. It will expire, after this delay, and when the session cleaner is ran, so every %s/%s access, but only during access made by other sessions.
Note: on some servers with an external session cleaning mechanism (cron under debian, ubuntu ...), the sessions can be destroyed after a period defined by the default session.gc_maxlifetime, no matter what the value entered here. From 9e12de7d833d229dfe9b3f86178be82cecb230a2 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 7 Oct 2015 08:34:09 +0200 Subject: [PATCH 22/23] FIX Missing exclude to avoid duplicate menu css declaration --- htdocs/theme/eldy/style.css.php | 2 +- htdocs/theme/md/style.css.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index d00731dce94..b6987ed42cc 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -861,7 +861,7 @@ foreach($conf->modules as $val) $mainmenuusedarray=array_unique(explode(',',$mainmenuused)); $generic=1; -$divalreadydefined=array('home','companies','products','commercial','accountancy','project','tools','members','agenda','holiday','bookmark','cashdesk','ecm','geoipmaxmind','gravatar','clicktodial','paypal','webservices'); +$divalreadydefined=array('home','companies','products','commercial','externalsite','accountancy','project','tools','members','agenda','holiday','bookmark','cashdesk','ecm','geoipmaxmind','gravatar','clicktodial','paypal','webservices'); foreach($mainmenuusedarray as $val) { if (empty($val) || in_array($val,$divalreadydefined)) continue; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 37265b852f4..0db79b5470a 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -898,7 +898,7 @@ foreach($conf->modules as $val) $mainmenuusedarray=array_unique(explode(',',$mainmenuused)); $generic=1; -$divalreadydefined=array('home','companies','products','commercial','accountancy','project','tools','members','agenda','holiday','bookmark','cashdesk','ecm','geoipmaxmind','gravatar','clicktodial','paypal','webservices'); +$divalreadydefined=array('home','companies','products','commercial','externalsite','accountancy','project','tools','members','agenda','holiday','bookmark','cashdesk','ecm','geoipmaxmind','gravatar','clicktodial','paypal','webservices'); foreach($mainmenuusedarray as $val) { if (empty($val) || in_array($val,$divalreadydefined)) continue; From 8db83a51b234a539a8fe116590970db9d0101809 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 7 Oct 2015 14:30:54 +0200 Subject: [PATCH 23/23] Missing translation --- htdocs/langs/en_US/admin.lang | 1 + 1 file changed, 1 insertion(+) diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index fec9f4876e1..0f267bd0520 100755 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1692,3 +1692,4 @@ MailToSendSupplierRequestForQuotation=To send quotation request to supplier MailToSendSupplierOrder=To send supplier order MailToSendSupplierInvoice=To send supplier invoice MailToThirdparty=To send email from thirdparty page +ByDefaultInList=Show by default on list view \ No newline at end of file