From 6969339159d178d8102861bc40fa87d2bbbc9da7 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Sat, 3 Oct 2015 08:18:03 +0200 Subject: [PATCH 01/51] Try for responsive design --- htdocs/theme/md_exp/style.css.php | 36 +++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/htdocs/theme/md_exp/style.css.php b/htdocs/theme/md_exp/style.css.php index e92ea9f2423..412f6dea8d0 100644 --- a/htdocs/theme/md_exp/style.css.php +++ b/htdocs/theme/md_exp/style.css.php @@ -3540,7 +3540,23 @@ border-top-right-radius: 6px; #tooltip { position: absolute; width: px; - } + } + + div.fichethirdleft { + width: 100%; + } + + div.fichetwothirdright { + width: 100%; + } + + div.fichehalfleft { + width: 100%; + } + + div.fichehalfright { + width: 100%; + } } @media only screen and (max-width: 570px) { @@ -3554,7 +3570,23 @@ border-top-right-radius: 6px; #tooltip { position: absolute; width: px; - } + } + + div.fichethirdleft { + width: 100%; + } + + div.fichetwothirdright { + width: 100%; + } + + div.fichehalfleft { + width: 100%; + } + + div.fichehalfright { + width: 100%; + } } From cb545332739894b48a23a1c6ba4be80a2031782e Mon Sep 17 00:00:00 2001 From: Drosis Nikos Date: Mon, 5 Oct 2015 17:38:26 +0300 Subject: [PATCH 02/51] Display names and numbers calls on --- htdocs/asterisk/wrapper.php | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/htdocs/asterisk/wrapper.php b/htdocs/asterisk/wrapper.php index e0f115e31c5..f168de78b6e 100644 --- a/htdocs/asterisk/wrapper.php +++ b/htdocs/asterisk/wrapper.php @@ -112,6 +112,34 @@ $strMaxRetry = "2"; llxHeader(); +$sql = "SELECT s.nom as name FROM ".MAIN_DB_PREFIX."societe as s"; +$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."socpeople as sp ON sp.fk_soc = s.rowid"; +$sql.= " WHERE s.entity IN (".getEntity('societe', 1).")"; +$sql.= " AND (s.phone='".$db->escape($called)."'"; +$sql.= " OR sp.phone='".$db->escape($called)."'"; +$sql.= " OR sp.phone_perso='".$db->escape($called)."'"; +$sql.= " OR sp.phone_mobile='".$db->escape($called)."')"; +$sql.= $db->plimit(1); + +dol_syslog('click to dial search information with phone '.$called, LOG_DEBUG); +$resql = $db->query($sql); +if ($resql) +{ + $obj = $db->fetch_object($resql); + if ($obj) + { + $found = $obj->name; + } else { + $found = $notfound; + } + $db->free($resql); +} +else +{ + dol_print_error($db,'Error'); + $found = 'Error'; +} + $number=strtolower($called); $pos=strpos($number,"local"); if (! empty($number)) @@ -120,7 +148,7 @@ if (! empty($number)) { $errno=0; $errstr=0; - $strCallerId = "Dolibarr <".strtolower($caller).">"; + $strCallerId = "Dolibarr call $found <".strtolower($number).">"; $oSocket = @fsockopen($strHost, $port, $errno, $errstr, 10); if (!$oSocket) { From a1ae920b4acaa581b0eec5a04ff07118c27cb70c Mon Sep 17 00:00:00 2001 From: Drosis Nikos Date: Mon, 5 Oct 2015 17:46:02 +0300 Subject: [PATCH 03/51] For devices not supporting unicode characters --- htdocs/asterisk/cidlookup.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/htdocs/asterisk/cidlookup.php b/htdocs/asterisk/cidlookup.php index ef4eaefe9c2..771b2e29979 100644 --- a/htdocs/asterisk/cidlookup.php +++ b/htdocs/asterisk/cidlookup.php @@ -30,7 +30,7 @@ include '../master.inc.php'; $phone = GETPOST('phone'); -$notfound = $langs->trans("Unknown"); +$notfound = $phone; // Security check if (empty($conf->clicktodial->enabled)) @@ -73,5 +73,9 @@ else dol_print_error($db,'Error'); $found = 'Error'; } +//Greek to Latin +$greek = array('α','β','γ','δ','ε','ζ','η','θ','ι','κ','λ','μ','ν','ξ','ο','π','ρ','ς','σ','τ','υ','φ','χ','ψ','ω','Α','Β','Γ','Δ','Ε','Ζ','Η','Θ','Ι','Κ','Λ','Μ','Ν','Ξ','Ο','Π','Ρ','Σ','Τ','Υ','Φ','Χ','Ψ','Ω','ά','έ','ή','ί','ό','ύ','ώ','ϊ','ΐ','Ά','Έ','Ή','Ί','Ό','Ύ','Ώ','Ϊ'); -echo $found; +$latin = array('a','b','g','d','e','z','h','th','i','k','l','m','n','ks','o','p','r','s','s','t','u','f','ch','ps','w','A','B','G','D','E','Z','H','TH','I','K','L','M','N','KS','O','P','R','S','T','U','F','CH','PS','W','a','e','h','i','o','u','w','i','i','A','E','H','I','O','U','W','I'); + +print str_replace($greek, $latin, $found); From e3bdc8aaaa96bad54aafcc1e9dde27e84a91a28e Mon Sep 17 00:00:00 2001 From: "Andreas, OE8APR" Date: Mon, 5 Oct 2015 16:43:08 +0200 Subject: [PATCH 04/51] Get invoice customer contact Added functionality to get invoice customer contact as contact_xx tags --- .../facture/doc/doc_generic_invoice_odt.modules.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php index 12ea7aa7b08..542f53c24b7 100644 --- a/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php +++ b/htdocs/core/modules/facture/doc/doc_generic_invoice_odt.modules.php @@ -270,7 +270,11 @@ class doc_generic_invoice_odt extends ModelePDFFactures { // On peut utiliser le nom de la societe du contact if (! empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) $socobject = $object->contact; - else $socobject = $object->client; + else { + $socobject = $object->client; + // if we have a BILLING contact and we dont use it as recipient we store the contact object for later use + $contactobject = $object->contact; + } } else { @@ -344,8 +348,12 @@ class doc_generic_invoice_odt extends ModelePDFFactures $array_objet=$this->get_substitutionarray_object($object,$outputlangs); $array_propal=is_object($propal_object)?$this->get_substitutionarray_object($propal_object,$outputlangs,'propal'):array(); $array_other=$this->get_substitutionarray_other($outputlangs); + // retrieve contact information for use in invoice as contact_xxx tags + $array_thirdparty_contact = array(); + if ($usecontact) + $array_thirdparty_contact=$this->get_substitutionarray_contact($contactobject,$outputlangs,'contact'); - $tmparray = array_merge($array_user,$array_soc,$array_thirdparty,$array_objet,$array_propal,$array_other); + $tmparray = array_merge($array_user,$array_soc,$array_thirdparty,$array_objet,$array_propal,$array_other,$array_thirdparty_contact); complete_substitutions_array($tmparray, $outputlangs, $object); // Call the ODTSubstitution hook $parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); From 3aeeab96542b75189df9aed09a7074f756e3e300 Mon Sep 17 00:00:00 2001 From: "Andreas, OE8APR" Date: Mon, 5 Oct 2015 16:44:51 +0200 Subject: [PATCH 05/51] Get proposal customer contact Added functionality to get proposal customer contact as contact_xx tags --- .../doc/doc_generic_proposal_odt.modules.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php index 80ec0ba6fe0..d6773eb2c80 100644 --- a/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php +++ b/htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php @@ -288,9 +288,9 @@ class doc_generic_proposal_odt extends ModelePDFPropales dol_mkdir($conf->propal->dir_temp); - // If BILLING contact defined on invoice, we use it + // If CUSTOMER contact defined on proposal, we use it $usecontact=false; - $arrayidcontact=$object->getIdContact('external','BILLING'); + $arrayidcontact=$object->getIdContact('external','CUSTOMER'); if (count($arrayidcontact) > 0) { $usecontact=true; @@ -302,13 +302,16 @@ class doc_generic_proposal_odt extends ModelePDFPropales { // On peut utiliser le nom de la societe du contact if (! empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) $socobject = $object->contact; - else $socobject = $object->client; + else { + $socobject = $object->client; + // if we have a CUSTOMER contact and we dont use it as recipient we store the contact object for later use + $contactobject = $object->contact; + } } else { $socobject=$object->client; } - // Make substitution $substitutionarray=array( '__FROM_NAME__' => $this->emetteur->name, @@ -369,8 +372,12 @@ class doc_generic_proposal_odt extends ModelePDFPropales $array_thirdparty=$this->get_substitutionarray_thirdparty($socobject,$outputlangs); $array_objet=$this->get_substitutionarray_object($object,$outputlangs); $array_other=$this->get_substitutionarray_other($outputlangs); + // retrieve contact information for use in proposal as contact_xxx tags + $array_thirdparty_contact = array(); + if ($usecontact) + $array_thirdparty_contact=$this->get_substitutionarray_contact($contactobject,$outputlangs,'contact'); - $tmparray = array_merge($array_user,$array_soc,$array_thirdparty,$array_objet,$array_other); + $tmparray = array_merge($array_user,$array_soc,$array_thirdparty,$array_objet,$array_other,$array_thirdparty_contact); complete_substitutions_array($tmparray, $outputlangs, $object); // Call the ODTSubstitution hook $parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs,'substitutionarray'=>&$tmparray); 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 06/51] 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 07/51] 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 08/51] 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 09/51] 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 10/51] 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 11/51] 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_liste_field_titre(''); } print_liste_field_titre( $langs->trans("AmountTTC"), diff --git a/htdocs/compta/stats/casoc.php b/htdocs/compta/stats/casoc.php index 7b9cfdd7913..dade07fd0e3 100644 --- a/htdocs/compta/stats/casoc.php +++ b/htdocs/compta/stats/casoc.php @@ -350,7 +350,7 @@ if ($modecompta == 'CREANCES-DETTES') { $sortorder ); } else { - print ''; + print_liste_field_titre(''); } print_liste_field_titre( $langs->trans("AmountTTC"), From f8ade01f0efc5c179ba3bb3e0bb70fca5b66d15d Mon Sep 17 00:00:00 2001 From: aspangaro Date: Wed, 7 Oct 2015 21:48:46 +0200 Subject: [PATCH 17/51] New : Add payment donation in accountancy expert --- htdocs/accountancy/journal/bankjournal.php | 176 +++++++++++---------- 1 file changed, 92 insertions(+), 84 deletions(-) diff --git a/htdocs/accountancy/journal/bankjournal.php b/htdocs/accountancy/journal/bankjournal.php index 812acf5c923..01957fcedf5 100644 --- a/htdocs/accountancy/journal/bankjournal.php +++ b/htdocs/accountancy/journal/bankjournal.php @@ -40,6 +40,7 @@ require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; +require_once DOL_DOCUMENT_ROOT.'/don/class/paymentdonation.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/salaries/class/paymentsalary.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php'; @@ -120,6 +121,7 @@ $paymentsupplierstatic = new PaiementFourn($db); $societestatic = new Societe($db); $userstatic = new User($db); $chargestatic = new ChargeSociales($db); +$paymentdonstatic = new PaymentDonation($db); $paymentvatstatic = new TVA($db); $paymentsalstatic = new PaymentSalary($db); @@ -133,7 +135,8 @@ if ($result) { $cptcli = (! empty($conf->global->ACCOUNTING_ACCOUNT_CUSTOMER) ? $conf->global->ACCOUNTING_ACCOUNT_CUSTOMER : $langs->trans("CodeNotDef")); $accountancy_account_salary = (! empty($conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT) ? $conf->global->SALARIES_ACCOUNTING_ACCOUNT_PAYMENT : $langs->trans("CodeNotDef")); $accountancy_account_pay_vat = (! empty($conf->global->ACCOUNTING_VAT_PAY_ACCOUNT) ? $conf->global->ACCOUNTING_VAT_PAY_ACCOUNT : $langs->trans("CodeNotDef")); - + $accountancy_account_pay_donation = (! empty($conf->global->DONATION_ACCOUNTINGACCOUNT) ? $conf->global->DONATION_ACCOUNTINGACCOUNT : $langs->trans("CodeNotDef")); + $tabpay = array (); $tabbq = array (); $tabtp = array (); @@ -174,95 +177,100 @@ if ($result) { // get_url may return -1 which is not traversable if (is_array($links)) { - - foreach ( $links as $key => $val ) - { - $tabtype[$obj->rowid] = $links[$key]['type']; + foreach ( $links as $key => $val ) + { + $tabtype[$obj->rowid] = $links[$key]['type']; - if ($links[$key]['type'] == 'payment') - { - $paymentstatic->id = $links[$key]['url_id']; - $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentstatic->getNomUrl(2); - } - else if ($links[$key]['type'] == 'payment_supplier') - { - $paymentsupplierstatic->id = $links[$key]['url_id']; - $paymentsupplierstatic->ref = $links[$key]['url_id']; - $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentsupplierstatic->getNomUrl(2); - } - else if ($links[$key]['type'] == 'company') - { - $societestatic->id = $links[$key]['url_id']; - $societestatic->name = $links[$key]['label']; - $tabpay[$obj->rowid]["soclib"] = $societestatic->getNomUrl(1, '', 30); - $tabtp[$obj->rowid][$compta_soc] += $obj->amount; - } - else if ($links[$key]['type'] == 'user') - { - $userstatic->id = $links[$key]['url_id']; - $userstatic->name = $links[$key]['label']; - $tabpay[$obj->rowid]["soclib"] = $userstatic->getNomUrl(1, '', 30); - // $tabtp[$obj->rowid][$compta_user] += $obj->amount; - } - else if ($links[$key]['type'] == 'sc') - { - $chargestatic->id = $links[$key]['url_id']; - $chargestatic->ref = $links[$key]['url_id']; - - $tabpay[$obj->rowid]["lib"] .= ' ' . $chargestatic->getNomUrl(2); - if (preg_match('/^\((.*)\)$/i', $links[$key]['label'], $reg)) { - if ($reg[1] == 'socialcontribution') - $reg[1] = 'SocialContribution'; - $chargestatic->lib = $langs->trans($reg[1]); - } - else + if ($links[$key]['type'] == 'payment') { - $chargestatic->lib = $links[$key]['label']; + $paymentstatic->id = $links[$key]['url_id']; + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentstatic->getNomUrl(2); } - $chargestatic->ref = $chargestatic->lib; - $tabpay[$obj->rowid]["soclib"] = $chargestatic->getNomUrl(1, 30); - - $sqlmid = 'SELECT cchgsoc.accountancy_code'; - $sqlmid .= " FROM " . MAIN_DB_PREFIX . "c_chargesociales cchgsoc "; - $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "chargesociales as chgsoc ON chgsoc.fk_type=cchgsoc.id"; - $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementcharge as paycharg ON paycharg.fk_charge=chgsoc.rowid"; - $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "bank_url as bkurl ON bkurl.url_id=paycharg.rowid"; - $sqlmid .= " WHERE bkurl.fk_bank=" . $obj->rowid; - - - dol_syslog("accountancy/journal/bankjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); - $resultmid = $db->query($sqlmid); - if ($resultmid) + else if ($links[$key]['type'] == 'payment_supplier') { - $objmid = $db->fetch_object($resultmid); - $tabtp[$obj->rowid][$objmid->accountancy_code] += $obj->amount; + $paymentsupplierstatic->id = $links[$key]['url_id']; + $paymentsupplierstatic->ref = $links[$key]['url_id']; + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentsupplierstatic->getNomUrl(2); } + else if ($links[$key]['type'] == 'company') + { + $societestatic->id = $links[$key]['url_id']; + $societestatic->name = $links[$key]['label']; + $tabpay[$obj->rowid]["soclib"] = $societestatic->getNomUrl(1, '', 30); + $tabtp[$obj->rowid][$compta_soc] += $obj->amount; + } + else if ($links[$key]['type'] == 'user') + { + $userstatic->id = $links[$key]['url_id']; + $userstatic->name = $links[$key]['label']; + $tabpay[$obj->rowid]["soclib"] = $userstatic->getNomUrl(1, '', 30); + // $tabtp[$obj->rowid][$compta_user] += $obj->amount; + } + else if ($links[$key]['type'] == 'sc') + { + $chargestatic->id = $links[$key]['url_id']; + $chargestatic->ref = $links[$key]['url_id']; + + $tabpay[$obj->rowid]["lib"] .= ' ' . $chargestatic->getNomUrl(2); + if (preg_match('/^\((.*)\)$/i', $links[$key]['label'], $reg)) { + if ($reg[1] == 'socialcontribution') + $reg[1] = 'SocialContribution'; + $chargestatic->lib = $langs->trans($reg[1]); + } + else + { + $chargestatic->lib = $links[$key]['label']; + } + $chargestatic->ref = $chargestatic->lib; + $tabpay[$obj->rowid]["soclib"] = $chargestatic->getNomUrl(1, 30); + + $sqlmid = 'SELECT cchgsoc.accountancy_code'; + $sqlmid .= " FROM " . MAIN_DB_PREFIX . "c_chargesociales cchgsoc "; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "chargesociales as chgsoc ON chgsoc.fk_type=cchgsoc.id"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "paiementcharge as paycharg ON paycharg.fk_charge=chgsoc.rowid"; + $sqlmid .= " INNER JOIN " . MAIN_DB_PREFIX . "bank_url as bkurl ON bkurl.url_id=paycharg.rowid"; + $sqlmid .= " WHERE bkurl.fk_bank=" . $obj->rowid; + + + dol_syslog("accountancy/journal/bankjournal.php:: sqlmid=" . $sqlmid, LOG_DEBUG); + $resultmid = $db->query($sqlmid); + if ($resultmid) + { + $objmid = $db->fetch_object($resultmid); + $tabtp[$obj->rowid][$objmid->accountancy_code] += $obj->amount; + } + } + else if ($links[$key]['type'] == 'payment_donation') + { + $paymentdonstatic->id = $links[$key]['url_id']; + $paymentdonstatic->fk_donation = $links[$key]['url_id']; + $tabpay[$obj->rowid]["lib"] .= ' ' . $langs->trans("PaymentDonation"); + $tabtp[$obj->rowid][$accountancy_account_pay_donation] += $obj->amount; + } + else if ($links[$key]['type'] == 'payment_vat') + { + $paymentvatstatic->id = $links[$key]['url_id']; + $paymentvatstatic->ref = $links[$key]['url_id']; + $tabpay[$obj->rowid]["lib"] .= ' ' . $langs->trans("PaymentVat"); + $tabtp[$obj->rowid][$accountancy_account_pay_vat] += $obj->amount; + } + else if ($links[$key]['type'] == 'payment_salary') + { + $paymentsalstatic->id = $links[$key]['url_id']; + $paymentsalstatic->ref = $links[$key]['url_id']; + $paymentsalstatic->label = $links[$key]['label']; + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentsalstatic->getNomUrl(2); + $tabtp[$obj->rowid][$accountancy_account_salary] += $obj->amount; + } + else if ($links[$key]['type'] == 'banktransfert') + { + $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentvatstatic->getNomUrl(2); + $tabtp[$obj->rowid][$cpttva] += $obj->amount; + } + /*else { + $tabtp [$obj->rowid] [$accountancy_account_salary] += $obj->amount; + }*/ } - else if ($links[$key]['type'] == 'payment_vat') - { - $paymentvatstatic->id = $links[$key]['url_id']; - $paymentvatstatic->ref = $links[$key]['url_id']; - $tabpay[$obj->rowid]["lib"] .= ' ' . $langs->trans("PaymentVat"); - $tabtp[$obj->rowid][$accountancy_account_pay_vat] += $obj->amount; - } - else if ($links[$key]['type'] == 'payment_salary') - { - $paymentsalstatic->id = $links[$key]['url_id']; - $paymentsalstatic->ref = $links[$key]['url_id']; - $paymentsalstatic->label = $links[$key]['label']; - $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentsalstatic->getNomUrl(2); - $tabtp[$obj->rowid][$accountancy_account_salary] += $obj->amount; - } - else if ($links[$key]['type'] == 'banktransfert') - { - $tabpay[$obj->rowid]["lib"] .= ' ' . $paymentvatstatic->getNomUrl(2); - $tabtp[$obj->rowid][$cpttva] += $obj->amount; - } - /*else { - $tabtp [$obj->rowid] [$accountancy_account_salary] += $obj->amount; - }*/ - } - } $tabbq[$obj->rowid][$compta_bank] += $obj->amount; From deaf23870e3d2e980fd7c329abec94d493f35d87 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Wed, 7 Oct 2015 21:52:30 +0200 Subject: [PATCH 18/51] Cancel work on responsive design --- htdocs/theme/md/style.css.php | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index d9910f82dd7..b917022cf84 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3560,22 +3560,6 @@ border-top-right-radius: 6px; position: absolute; width: px; } - - div.fichethirdleft { - width: 100%; - } - - div.fichetwothirdright { - width: 100%; - } - - div.fichehalfleft { - width: 100%; - } - - div.fichehalfright { - width: 100%; - } } @media only screen and (max-width: 570px) { @@ -3590,22 +3574,6 @@ border-top-right-radius: 6px; position: absolute; width: px; } - - div.fichethirdleft { - width: 100%; - } - - div.fichetwothirdright { - width: 100%; - } - - div.fichehalfleft { - width: 100%; - } - - div.fichehalfright { - width: 100%; - } } From 0d799402d0b6b2becbcd997d05c9b670ffa20f01 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Thu, 8 Oct 2015 23:50:17 +0200 Subject: [PATCH 19/51] Work on image for "no photo" with better resolution --- dev/cliparts/commons.svg | 2049 ++++++++++++++++++++++++ htdocs/admin/company.php | 4 +- htdocs/core/class/html.form.class.php | 2 +- htdocs/core/lib/usergroups.lib.php | 2 +- htdocs/public/theme/common/nophoto.jpg | Bin 1307 -> 0 bytes htdocs/public/theme/common/nophoto.png | Bin 0 -> 75936 bytes htdocs/viewimage.php | 2 +- 7 files changed, 2054 insertions(+), 5 deletions(-) create mode 100644 dev/cliparts/commons.svg delete mode 100644 htdocs/public/theme/common/nophoto.jpg create mode 100644 htdocs/public/theme/common/nophoto.png diff --git a/dev/cliparts/commons.svg b/dev/cliparts/commons.svg new file mode 100644 index 00000000000..4b8820d06f5 --- /dev/null +++ b/dev/cliparts/commons.svg @@ -0,0 +1,2049 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/htdocs/admin/company.php b/htdocs/admin/company.php index eb78ead387b..b9660c8a04d 100644 --- a/htdocs/admin/company.php +++ b/htdocs/admin/company.php @@ -380,7 +380,7 @@ if ($action == 'edit' || $action == 'updateedit') print ''; } } else { - 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/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 12/51] 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 13/51] 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 14/51] 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 From ea949437ab09bd29d0d4c9acb765cfaef3931beb Mon Sep 17 00:00:00 2001 From: tysauron Date: Wed, 7 Oct 2015 17:17:32 +0200 Subject: [PATCH 15/51] For not error Undefined property: stdClass::$id --- htdocs/comm/action/class/actioncomm.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/comm/action/class/actioncomm.class.php b/htdocs/comm/action/class/actioncomm.class.php index d9f2d7b6541..10fcc6c0173 100644 --- a/htdocs/comm/action/class/actioncomm.class.php +++ b/htdocs/comm/action/class/actioncomm.class.php @@ -218,7 +218,7 @@ class ActionComm extends CommonObject $this->userassigned[$tmpid]=array('id'=>$tmpid); } - if (is_object($this->contact) && $this->contact->id > 0 && ! ($this->contactid > 0)) $this->contactid = $this->contact->id; // For backward compatibility. Using this->contact->xx is deprecated + if (is_object($this->contact) && isset($this->contact->id) && $this->contact->id > 0 && ! ($this->contactid > 0)) $this->contactid = $this->contact->id; // For backward compatibility. Using this->contact->xx is deprecated $userownerid=$this->userownerid; From e1f946578b2dcb96a978991bdeacc91623638264 Mon Sep 17 00:00:00 2001 From: aspangaro Date: Wed, 7 Oct 2015 21:06:55 +0200 Subject: [PATCH 16/51] Fix presentation --- htdocs/compta/stats/cabyuser.php | 2 +- htdocs/compta/stats/casoc.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/compta/stats/cabyuser.php b/htdocs/compta/stats/cabyuser.php index 385ac1f140c..cb8151cf33c 100644 --- a/htdocs/compta/stats/cabyuser.php +++ b/htdocs/compta/stats/cabyuser.php @@ -280,7 +280,7 @@ if ($modecompta == 'CREANCES-DETTES') { $sortorder ); } else { - print '
'; print ''; @@ -769,7 +769,7 @@ else } else { - print ''; + print ''; } print ''; diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 8d69e58bad3..5591847ddc1 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5197,7 +5197,7 @@ class Form } else { - $nophoto='/public/theme/common/nophoto.jpg'; + $nophoto='/public/theme/common/nophoto.png'; if (in_array($modulepart,array('userphoto','contact'))) // For module thar are "physical" users { $nophoto='/public/theme/common/user_anonymous.png'; diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index cb62b63377f..10b97265a93 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -355,7 +355,7 @@ function show_theme($fuser,$edit=0,$foruserprofile=false) print '
'; $file=$dirtheme."/".$subdir."/thumb.png"; $url=$urltheme."/".$subdir."/thumb.png"; - if (! file_exists($file)) $url=$urltheme."/common/nophoto.jpg"; + if (! file_exists($file)) $url=DOL_URL_ROOT.'/public/theme/common/nophoto.png'; print 'id:'').'" style="font-weight: normal;" alt="'.$langs->trans("Preview").'">'; if ($subdir == $conf->global->MAIN_THEME) $title=$langs->trans("ThemeCurrentlyActive"); else $title=$langs->trans("ShowPreview"); diff --git a/htdocs/public/theme/common/nophoto.jpg b/htdocs/public/theme/common/nophoto.jpg deleted file mode 100644 index 14eeb1cf01fcd037f612061d53c9bf18d61be901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1307 zcmex=NKJ3#L0SE}i!Mf);VHl()9 z-81=jsr=>ARac_6w9K{mXs`IFZqd@kiQ0n7k5ZDO9NgyCoIMqgDPi3AbMyBIw*kM01Q5R#s#X6J%DHbwbM58=vEMs+ zPi2+;u)MmxerD3vM@_*?{J#mL@m`(2pfxjVOM*f0F^k~ldosdb7QOr?FSi}&B5-t;Ecnj;7Pn$ z^#s&{qE_I{(dC=smcxS)n0Dbt15H&lbOc6gqk=)eM1h3|5y2?%bKZ&7`WFqO+_hG& z-uLW3L)pxZxye#lpq&d5J`G(BU=@z+9XUthP$;SB}pG9TE zskMu;c+Z@*n9aRL|xP?#a*M^_Q+NKk!+%MSOMg zck$Jo`K}7f5A+xMNAEvg5GFZIbHT17QYu_&ysA?(N*yoMZ*&n0)ch(#Fd%C=bKIfyk*E_{^FaptI`M5w;fK5>sl-?~2S+q>ZTng0wf={2UCKKaNmuAKX9 b>SalN)wsjWw;VO~()awGu-Iu|_Wzpz#j2J= diff --git a/htdocs/public/theme/common/nophoto.png b/htdocs/public/theme/common/nophoto.png new file mode 100644 index 0000000000000000000000000000000000000000..c3989b59135510003b18afc6081242646afdbc74 GIT binary patch literal 75936 zcmXtf3p~^R_x~8JTvNH^e%Hsn<}OrjLoOkrM5RgOx-90}mE@kwNXj)KBGaik=roi|61Sw&*QPjr_c7<>wR9YbI$WT&t)+-R;HY6f@}~7gwqURWD9{XZ!=zp z4}o{MBp*$K|F8sJFta}l{z4DCM}z-A;)iewgg{Ir7%!%sZ|<|;&66nOD=0f(Bno{a z;5Gz}Mk{;zcm>|N;dfivH^3u{a#j!m5r>!=owtARYKeq?b?yGx{@=c_9^?R2f{FR5 zB$^pfPB{Nupi}A;OTqe47URUZbwi$`CtenwIA6?nE(%fg!-$84Ny4^Z5=bKPn9mmN zF-L93;$@}B#z@%uK5YGD`AB1pJN1s|)PhM0*LdyN!qjYk zGrsF}qwl#LhpMRh+4fhg*S9vpR+xR62IiX7s`%Ny(vE%A<^ycPee| zU9^W08q(6Bo$vYG_}k7oWbD zUk)$j3_XTm&NEw1jf_Z1qsw(Bv@>Z|-E>#wNpiMr2Ny*E(;0*QC6gt9Uud%)HOv^=g<&LKRx?Ok0V4|8;y^J+_jB{e= zDPN*2BYV0Mtn;3HuoZ(x!lG!M39#;^rcs2XWNZ;*%``<}{StQS6)Mxx;?Aig`y^CI zU*qS99Bh+-keQKtIJnzmourA#``DHr30#~q1bF#C!74N%)5+9Zn#U6fKDTw8)tl3t z%{$Y=qk2m1CE|V$i|DVs&k-%yrsH6b%ouR|LHpqIOS1UwwOcNq^a|9{kF8phhu5ah z!xg@o97{4O1fpD?r{qQTCGqWwM9SPe9^>ArixWw_m( zSOI?$B{kA?`wr@WDUK40a4jasBFgJ%0o?}X24^*r5QYz6+sDP?C@nnTs{sgBS0i~_ z(SoTL2_}mpF_zMVRdak^s9HlriwV^@{}?z!C4!1;4}-N`z>?G&!DV?4Z}NwSyq&j(@Lm@9gA{yd^rA0tG|)7?seFQL(1?fkGwC@h)r+?wZyfWGz{b! zv`NcttCS=Jt}r_?rDu*!_unwe_XWZQbdsJy zTqTvZgka#S-~MtFF44WZmmV#sg2mw5+S3%Fq_kZXsNuuuXvFj`WSevG-M%5?>j8|9 z$rK9+Es>9QpYic}@C%gv!Cg2;Q|Cpr;%gxI(|Q^oIJvc(o1ZXGk`rE3LVSM@u zeERJrcU~q$n7vd?*mUhJq?>h4aW$ZIglRWjY?-}rX*a}6q{<>(kL4BTwQ|ExMwP~_ zuF_J(FoDH8bj`@qt^WD?g(?0vlA~*Efbp4gV6O~Z`8ns`a?D>IP9vsHm~r!jBz@Xw?6}#9 z!}hpr-xhp?qk8PGwUAXHUCath3edbLY3Xqu5WQzQ?mn_}(6W!1o|?r;7$q3#p-?=yW`gdOp7e(yg$!e*FVi>GN>2-uDJj zkF2qK{pbIAAVQ>$25~bW3%FI2wbqhGBHN=Fz!T-6#+IWpTYRpB$qVY0D&__4GM!7_ z*<;s&ZC7J^Vz{IT3qbpKzmrUvU7=jCG_Lr8?n0>bnTVu_&)t(pEM?SZDHdy&#&R6@ zMvP)3q?(xaShkC?O(G&D`Imsn4MyTrxIa z+knubv8X1dv{sgb#q;91tHmAjcfljye2Q|NLDs?y<}Ip$<1ri;n|h{HC@tI z3W2)?y0N=SZFB|ebsthb6z+z!V_Xy)xF~r)>LvU^l2!Z36T(GFbpCB!G2UI%?ozl$ zvYI5?7pftyw6`vriFDM3N3lo2dzQ+84F>}-B)};8%vxMp%mT-Ri~3KP&G+;vtW&XL z7H?zni|c7u2>tZnC$8*sB`Z*JC?OmD$;2c-9Y`9|N_v(;i4HuW^Xk2`4#ISPMM7zV zJ7Wy5eBWzD#`y;kVOvFT*;a4Ge(zE2(IvB+YBfnQB ztAc)BJN`xCi59QxX{v4*x6qxp_jG8Kdt`4iGn^)_^8#`G9XZw>Pl7>RVa-Prd4=Wr zbj(cWeOZ0ftJ(op4ZgsY_n6*}2t)}ux?W`MWlcG?4{iuKO2|u__>ire!TQ$DTWH8`yKHA^QB+>f($<2wqOO*oW!f+ZzH$Pp#*q}mC;kL zJ}s=o@XZIQb85wGyeYi^P{Dh}q&Idw0CH$VDvwB-pStZ&Z z*7lC%h@{@W13Ms+vkh23P3dAbU}_e~mXVr-f_S1{Wy**r9O$XYPYV$z1^9&J6h1J; zt5p>PsCjP&gnEuUQ1R2Ka0kb(OGkYQPsa8<=aP~fvzZJCWcD1JQq!{HyC~)Im{tNV zY6#F7&Q=m<9n1DbRGOPFQ;VcXS%fTre)lX~`FZCJs^NUp-Vv?A?&~kOBngi4+sR(D zU*5+{=ncBNd1u;Kr}!KM7yN@N$(>&mD8gd@H2!X@zhsZJ%VW$3zMtl=i^&!~^|W35 zZ8hrWk1fpekO(z6{T5%6zCVD}lUiJ(I$Bow9eAU%tI3VFt?5L6Y83vzd@0K^unUU0 zg|%0ss)G^8PS?|(;y>a=)#jO;v-6>+itdP{%*3%Z&pgNZn(B<~r}R59Uz7{`_UkMh zqYVzA21C2@Y#&nP5fBuXdzjMOb6^23)f|YUTt_=hAo+7W?>$CV2VnBZX)+evP)~7V z(Y_-v-8Jy!YfQpLDSk5C_Ny}M#4u*hRu@?vi)=lU-Hlastji4hAP5VI!4{9^fW z;iAdHL`qhK3wS^q&~kSG^)&to{zJdh@1-EJaCXHhNvC80 z#K`>y*gl0A7C{)elXbh<<46We=v4P>;LMVQ2<(3UyV?N-S3-W~iJt}y&JMWv0!!mTt{<^6oWnjl8n;x?ffagq9l(MH~#4@#uxTG z-CcqbmenFeMT|02*qR5kaS76TNt^571Mf4QA6sM?lBCtqtn!Up`g5A-N~^pg@iGiY zzYlzhxdoEO8E}Uxwl~TPs%d>BtA)v zBHG~#k%Jg$!s%a*@f1hm$-cZcd}0)%X+MtrX=)XpsDLUVWbbKo0Bf>?k=Tqm;GUU0ZocrE2bI$HE~qGy1$Y+MO;d^8Ys5Zh~O>Xfs z!bO?AEX`#eDFsDfb5mm2iA81Y2_SW@ml?N6FdXP7dgC=N;gB**Py*N_LV|SL<1XrG z2RCnMaR$!!VnYi(0~}~ge)Te(W(cl?r&ttyz`T0g4TVaR4}OAb*^2-c7J4U!OMHh+ zdB#lrAu!v_a*ZX_eD=Cg{@;u-PJB_Mg;~q|JV}5oiZ+l2l0Pz8z5S8c#HuBv1x}QD zmQ(m9l4=a&;Yk_~q~1gD|BMGVtz>X0e!%m0rI!3QBTqV9_xxK%*Xa3>!y~{D85BNx zFagIcu6Km0^~M$GvW{nTq#J1hOY#P{{v?2U8)5B7It4E5EaakERm8vTwJ6QXekU1z zEC1l|=umed5Phj%ICMthRA63_*=UEy6cLFgiscTaYXA{Chxsgzf>(aJ$S1;;5e1fI#ki5+>x#1Y*~fJH!q z;8nGGj}RPS^(>_XQVW^R1*^Z{^^sfG7+UufrZn>{BDOQZsma=Ia&U}h({|1cPY<^DVcy>WLGUas$CJc47SS*gL$%8gHyv@0zL>*!BDj~*3BbqYC%JAd) z1J3JrAbw>v{ocxgt-i-7`}fJA;xWAh_P{8qo~2(PTu2fciS)ySDu;0(!G$AQpSzU- z=vEg!oMIu;ui_W`wL=y!yK%!Ys*Ib6#`&`C@m*2Yu}~55MS2)LOB^Sh$UZbrDN33O zh~Tei?rZ}3eS#%%mvR#sQifmAC)x^Tn5+uD1n3!z=jnF}SyUunMLGb;mz1m&N3XzM z9T5f?oZhQm)rd^@c}Lb12c;Ng)_qOzl#4Jf!rcfSo(?E_ioH%)KsdXAUzwE)UUd_k zT$y+8&@|;9J{5l*Z2R-18yb$0Wr&F=Ack?0P29XuY1g;a{UWjVfwBMY7v4Jr2uP&R zcaQo5rHYRXS!d#~boSAsb=u%rOPm)2sQdlr^F!1gPKgu4R2MbVmcgyqM4>*=oftM| zw42+wzkC%>{XQlBdpW-^w-10^7`Q74F-&WbNjO+HK19AE9ZTY6KvBLkkzSQ==bHAs zmtaVR;4;QG7Q_jf^4r?;6saiP$W5^Kk4O2mi55V#!SZopm@zrT?a_jw-Uc^05V>WA zI=a}@s23*f0!k-%(o8wgmC3t+;c;=D-PaG*Kt2Ff8VW%p?o$hZMXq?V7!(o1PLi+V z!OrK7Xtj2SAN{wpXy^KxwN!Rij$B_7*Eh=;E=j$jhdH3k_7F7_-UFVe3e)=0y{3^Y z0qntp60W)mf8&Zu6Meuu`mK919xTs$m;tH;OCgLFADOo~j!pXqm!M>SxxkBVH-x02dEIYW_4$q6_Rt|(@hBw{LK%n&b& zhl5oc_t1S4N180pgH_X%b|w$w`FB62@gDbIRD*?^b+l7tYrGC)yL_w*W4qjkITDop z%jDbzVcuQX;#>X|BLEyco@$h47C(i>=IRVCPe!%1d(PyatcNJgLW?&iWB>@`lkrNFW)vzB)Mv!<&z4iT@gT;KjzteI|eaH*S-u6n#}4L={1J4?>w_+v6JjPsf6hA2cp?0Ji}N zYq-4MO;o%*2!US!F*=`VDLNOXnVXZC5D-y`%@!27037k;OBf{L(8U+MwlX;AJjB!# z=BXjrS`J4a$oe5s@od7kkOuKw3}4~s9B}%;8Wab}md@dlUi;NQ-$_(ydVAJv6U735 z0~ut-hzLnYP+d!+pj$jqX@dVTRQ+px}Qs`}GT-B>`jGr;02ROat z;z@X1bM?$cH!nCwO9uhBX)TAMHOb*_AZ7Cr_Cgvw|KHPzVfV-mZXhqezjml12HPYo zlHc!{)h(!CupGobrb3k~{&)4yaK2EY;rdHVo zY9L)sJ779EH0oH?6$6YT4M&v{v7a!|vG{f(Qlw|8um8MY99wv5Jxwm^Sro7Y#c!7Q z*T`W27eGHr^)xqfEq*??%6;%E{t$922Z(9J+VZ@!=m&^A$Fpyr_JQrU|DQd%Q}mys zM@P~lBE15f{DK|oJ)WcqqcB%C6#bFH*C4li z{wdyMj-m@0fdY;?^Wz#ro8mf%$zn1!36~(7t*fD<(`o_(@hVT*)4pxdX6SyHVLBQow;mMan;fxK~f}$EVH|5k2nfO|IeZ&z2b%fJzr_ zPPh_dyDaRc3CAe^6E!b@`jr&H@`_cuKUf|msVce<%~g5$YErmfLAsi8Q93cql`u6} z_0A|HdWhlX|Gb}p3EKgFFU{{WKg%5Bg;2sFp8KWa6W!s*MI;mKS23-m5ed>txEm_X zcsm}O&G*k~E-`W)6E_@i&&(qiRjUkw!isPa{94-5m#E0(4^p9L!O`E5sfjohvk=>5 zIiSvIUalU}q!s6ZhF2GeI358oxbY`s^C#_dDOB@H{&KbEC zEgX$qm0mT5|6yd5l7wht*e$ZY+bj?^gk!Y3`?U)ZhIN9ivXYA%@_*N7N2cT&&cqZh z*ncP0LiX7{9Wr&w7>Tm%UNZO>6+r5>!g3A90g|k@EfC<(wAAp2xN=0u8og58VhF=Z zFsz`&awWq6YDD6=<+3wV+5!xqqsENTmajpipCcnd04ZnvM$IQeGse2`AM#0(Ud~Y^ z#IP%<#IwNPyRD;m^9&V@n6{I#^nb|*LMnjjoATN!EB#S=FSOYk*`)Kmvs+Y_v{hv@ zWIy!rnBOH-^w}RLvVGh`TWIB3V^9A1si0->t+@55FCa~N$FgStFX?2u#NdGs?_Mi8 zwAJrq0QyWV0+i-6tEUp%iXQdCtMYOU8HOMT@ZrNDP**CrAc8;09J@T!cxUJFWL`;d zk9;uqm67i2&$*H>XXaKNrc9deCg{e_?sJhd{=rDxH&VJdT{|m1;DBk-x$%7(t#Ufj zV2IohrY>ApNgQ&QuwUh0HgX$SILiL_*dnn3usMbm{GxP0BcL@P6Md^0b+3CV-uYT1 zQN5X?@mlO3YCj*oHqX#KwQxc4G0yi8(QqrM2W#1ovn=&Loy6eExrm2Kj{%Vu0pZsU;Np-Y&vw3VnG>~<|tZ25; zsV@sS3%+2p(c_7O1P(`ke5rNiGl|Ny71R6iXawxjt$1Lsy!D{M@h2*Z5wc|}O0Z!^ zQ3q0y&mK~mv|tUi*ZmTeMuDqc#4s81>B?HKULgj$P5m#@ekQfBzY@;QgY~k+YgYaE zHAlG>8NnXN3 zz0`+4(yz^TQwR_niOM&NrmLi|TLf*26HRI3E__1spGSfk1`mEEswcO~ejyAX5l%tp zdu|<#6HftO{lVnzjZ83s#S9KgZBr&q8YItp&F=e?75-Z z2I(_-cIBLqpJ!E0z{DV{*tUV&GBBD4uu&2tg9X&4Ll^DJUMF@%PsifPYZ=n?{>KGz z(&?&2Jb&anmoUEDhMA$%*23)EX-Y{lC3678uvp28*nh=sz{pmJVP0e;BjB;=og0T1 z8p9T2*7#CKjOVZ5FS;qgX=qg9VN30YE0iOPgRc}*F_Cb4iZMt8dP!7q(xQyY>^^tC zE`H`c!;PiM#06n?0hVjRB9i8Ie4%6;w=RaT8KKMV3V?l>G5pTCQZupklw+duyPow8 z;Cfr~*CkHM z{(l6fF2!t)JuY6}6w&{i1*mAi0&Z_>-J|s|f@e&gnkee_mXR$GEGUzGq=@t3onbuN z&Ur5}5IE-f(z0QTwBLDDbcok`o=|kox!sp8X+(FV(}bY|xEM{4|EL}j5Ch&+71h+U z^ld@BnoNm+1jYA$jO=4D7{ft}ffwX-?m8_4op$Eyat1| zXG+&T|M&5i8L>n?FSyp-LQgh*Kdy?4sAy$#d=zra;h%M$4WOn*(IVp*CUY4CXkfI7 z&S$DL%`C#x6uDpVh~!?+%q8P!TlgqoLw>KZBp!wjN+%G*^vEmtQDD`({1wGmx`GZu zFJnvzZ=D;cNVY-ujVnJ_?_Xt|BEgu_jetgv=TDdc84=v6Fbd^R8lY`&F;PlAOG69d z_qQwwuHKcBOv?AEjovxqUYxG0Q7cRerq32`a#bWS>enD}Bx_QdHCIjD?f`os9bR%n z0(xDn3D4qOvK$Yqym^_Nzi_mA_y=yGj`lRaUB4EPt6!(!x+=gk5K6BCI{!06Jw2SW zJ6JRt*rz8%h21r&qn*Z& zss@=q-%fAs4Mg}ZGTju`aSScSd6w(Ni(W$8NcU1vzr@|Q670>m1eVvZG*C=w^Fam$ zg7}{_SvQkxkt}WIAZwtT=5CcNUCtldR@A(fT8=XD=wL^Su@NEO3{!+hHFYm>_n)u) zPD0DkSFpUkOt*TLNDJaa!|!6ft!1vx?wf| zG@I_)e6#Aq<%J_?*QcnWSB)=ep7e1bkKQ=}0VQ5ju! zuOjA>tg%lF2-frOkV)TwX@HwXpwbQvVx>C_kIPww8t5SS80|;xi5!qJyiJb+1a@pe z9Mto>n5|Q?qei(1{|)v5Ln$;7ZZ$|>dWk`xdoI=UCta)GTkD!gmL9X6ZAR{6~`a;@`=NEG0yq8z)csVbxlIZLBARuyGTX(n! zaEE+3O<67P#|6fV?ZBFO)_r7kGm7K3*>h4l09fbPKtk@-)=JP?FdidJQ z6k};$hbuRpoZhG;%9(wRWP;wg*F#Y3*gchM-kqr)d-J2?)k(RsvNA8|L1{oK(T_SE zB?gLoQR|U;_di&!V6iybe|YY^s+VPKp(5MqIve#%xUwHrQNq1#YS_-tUnx2 z3dO2<+8$ux9^r*@Iq-lP#J4!1_J#hulV=~OT88)XRv~+CcE0?tar;;7-n@aH(DZ+) z=G-C=$Wgu{r<`T$G3=gB`ys%=QzNH)mbyV|@h0@tq5-2^^Rmgb;ojWff_T`_DXHzE zr0f6#{)~43VuRtBt)aad48cuzvMTNXt)Lq3qK!#>=ko;?K9w zM1N(YCyO@*M$D3DK9~qRD0vKKsvMaxMjpjBFuw|{%Sn))WH=S!tfiH9oF4r4)mqgf zSAb`x(g04oCT!IGEL9ZHZ|iOr`lohT%gn(uXbMq8erNQuqf6@jVW(#`H8sxdolUmI zk8$g(U$`CB!irp5!XqZU%A1hG63(a4Vq8QHZ%}o+AO^u?j4gw7D+!l#BowY=>cn$p zs#_E!==@IqwT1aBkL_U2vc3{!JgNxUo$=A$%S(ZzH+z$1}!pgs_VrJvjm z2CmYpjPAMCd9M`~&suqg@K=mH!Qd<*B~49DQ@@^jfLqBkO^A=jdOd=1Bfm!Tkka-J zfO*ALGJShSq(?;RMuFO=JPKA3hiw8H?ht0b7{hg`=9uT}Yn``SRr;oA4&W)xNTe7e zb6$+A>eI(n;|SUhR^8-DH%$5NE&O;(;tPEff$F^*Ks5wa%-$#yQa#(KvBAinzV1n; z_~_pLw%X2YIC^cDw9De=hl;Me+Ow4KPs~4?Bd%gUTo#2@#cTWQJr-0n(9ElP+9F4;BSsUjZCAF>;%7_#&4bDtND|;K=H_M>a+U5 zp4PrHDwmvHq@tn*hMqu{v0?nyM&NSmy8u-8Q`K^^3gz$Kdf)u+A_yFZuURv=r<-po zZArDt0}*k)`{8~*3GNuMDKbHFWa4_!dufZ$&zuoIW`;NJ zcS7LiJMf@>ET5WMNi19YDS$DZKLx7${fW_t5BE_hj^9%)5yrF$H0loNhAV)3pO#?& z*Z6(f%G7R&D_vf*1tig#`Lp3Wj3;o7_A^o}$=LfxRxeljtBy}n!b5_0ZRTbR$P;^*m|mIpW3GE8rVeHi}%?oa8zt4P$gcYlG4<+@Fho&E`NuX-K+uL1;qaDG|0_pxz znv1a{F%kDmV9So)1-d(#pW)T-K`f4cO>LMXk63eaaSEy5`22XL;m-&5oahzMVK9K? zFbWjtsDsm0Eyl2<_q(jC>TZw7!ihnH%b>Pkjs#rHm(!a+J8$U}pq>DBiqjr(>(`0R zmOWDtx$Mxog1h-~ba^CXvf*&#jW16*SuUVM{i&&D)H*SKY#!{oj9&Iu$AY-63(`T+ zHw*j3l~@xr;Ml6gn+Uy?37966 zs|K9TJUvEE#n$_b}893;`mkGR8^!k{oNVdh51M_1TqL5?t=7zdSA@IMVE zMTR!h#gCxnE4Y8~y}GroNO_miHZUI_$7Qn>2*-d%C@^DAG5x(;Mdz)sXJ)^&)x=^p zz}^yuPdD7@L?brG!b>bRII7m~Gq)#-A^P_^(j}9Qkzc+RStFI|uvp zllq}rz~g@h=?BBTe0@E(SATK{YgOcy|IuA(`~njTUH$k6_}S^|-rxV)dH&VSj;SXi z4ZAP)ebTI5NeQaCgTv9}`z0DW?Lh#R5Xw80ewP&tZC6}k$ILfTCoPKYbE~VXCrn$y z=>mY}NtwKG`<^JlIOOoKL$b8zxG7*3_wL=}5LAnnNxzm1thpb2(mzsFU7afAb7dy@ zBArW%9GPip=tq^ni(Ze;H+7)Ol0v; zb2&~0N@Ol|UG^IJuI4sU+JjEBDT2bF&_{v7pc@1d4zlpMryy6>QWe)>S+#>>^cY%H z5)R+~S!R~3xQ00Z31oYhN=tXALix46E0*_$OPz=S>tg8{(q?ISod8le>qNHQ)yuCM zs-#f-4=#dH1ui&-M2axiVV5R|lS|y)pQB{~@u!_5;};ghujw6MB2CKzhN<_QYo-S~;-uzasm4Y$Z6~!+Y6#FKO*jJ@%B_JiX$}e*Mi9 zirBAGW}Y>k%2->b`^Zw-YLG=SLn%L-g~;v z@~O$`*F%cs`vP#Zc)Y9ASLYWTy9yPlSh}W8w7XqB&gEz}^vYB3i<${4+mzRdaZiq{ zKs^{elVXsRs5K-fD4bxs_TcA}vwy!H|7l#uBUawBuj7#urZG@tz0whZD+r;BHFuM! zuyF2~+x=gq37*>bbz$cM{wNZZ`Ij>SYB^J%Xm8_~L70NfXO8`&cXw~!fL&9v^6-!w zxsFi+lFHF2IF&q8#|>PR;jk_a2!OZU(Q=^O52h!Uu766GSV>|%(0Fblc`HhM;lrIEcfpNE;p(;e)-5;;6P zT!vW(`>Fa6wYDaF4aO(nr`y!fKFvGG{e5bSo#Iw=IT!F}>-n6B@C0QtMG2n}C4~u_ z-qoG#{v>M^@|E-qs={Q!V!8t=jIw9W-2wD0E;8aV>-P5;WLnJSK1s>y%BgUgl8b!m z@SiSqV5p;^>pf#Po{0$PH~x}?W)8p74y>b2V(O>kbu;uZK{@4)@~Qjbn?sI{XUmHk z$t#Zd$NE!^`Z`gMdX^mf&r9bJ>AHAoZXiS`b8O~amZ^1r$LE+}U#9tg8mhkV_Q$+& zYTHdvIB(8kytcN2(p^cJ22%qQTKz_iSGFqpN<87bZ9 z_s6H_`G`7z04zg}y+mF4bq!t;nwk=gu;PtvyIrzVy4;P02k-C9GhQV@mQIaeSLPqf zEa7NZt~%Z;xVg9QZ^>7rVD*GWjMjR(3)87>2UdPB^@#KbV0iG?T$0rG6vP?2!mWCI z+tcq5Pf})<>WvFtAFsR!A9mRNZ~zoJx$;fOcj?+7td90RA9kheO3Rh7HD5PV_&OK^ zPz`4eJsy2cbueKA`#3RM(y)092ga?wMq^aS{NviDMwzWZ1&3;DOcII_>Yr+AxL}1! zOMS$!<7Doy*4FO^4a`g_MIcIkyMeSL(#?P2=2|J?&#_HcSA8HZyWOmPBEq(0-7xFr zV$8c&&O)j!$=XD{iB^lXEw&%pp&ly&8>LHkq_`Yl8fdNfwy)MF%odZW=_?bNvcb9U@jCy>VL%V!rP-wDxd7F&xG%7GvU1Uv1bjg%Qe|-cb?lpd43DR*AuS-} zy?dXnh0>-OA)w_d;BP&Q**`BZ3pbz*+rIDjw24T67vj@(eMKUh9?5jSdH&&b7N5ht z;*z$Sfc(B>3!lE?-^Tk)ICv&$9^wVE_8%w^Cuo7Fqn_p|kz&jWEJy*4CCdh@Lgn8s zt9i8w%vycjpHd%3tHrH-P#{2tulhD!V#GX8=pl}1MFqXThg2v3Q0025eW)Rw2#LUJzEr@zq7`NVEA-cI^+X2CWc zFi9*b>U=)(|7MwhvWR>oL-18Y_S9TN%(dpbk#AQ&k+L?6P0^Amu=g?(`xsGVBptn0c>q zShILX@+#Vud)vd(m(bLbF&5N%5^Q=G?C7h)7dtWd2NdT1iX|BAZ|iP0xTcliC=EhP zQX%X0fOvW9t#`u{g!Mu;;xETvRxl~0%=c!~ zE*4*>DbM4j63(6}u{qT^mQwx`RC=CegW8P8%sXNWd#J~@_=H}9`<{*Zz>cB)$KgIxo zY;sN%0-a-aI0lRxBYd%AaC}qiY5i%6LrLsN087LL&T^Mxi#z~$EKZf8c~k(n<1Ght zU&}|=9y?wSF31BH`Kh9u^tWBCWs|>o^~r$q)vJHP$Nf}D9H5^t{-2rPd6enJcRwX6 zs$V@43kz7L;qw_bFQKEOV={6JmTge$g9&=5bZ|2au$(QQKY;JN%{Q1? zC*Ndr62RO~ak5!{(F7NFwFBMM_PJ0){BZC(lN6(%De=M?#1@bxmD{Yp14csdX?7jOeDTgs6BT^Wk68E(m$>hk|eg#xw zO4^=ysXr9c3*jESat;tk^sR3%7N`3AFRjx6r!T68BX5sSOt{|l^18ZAuu#!M?#!n5 zb+yK_l1q?$da3909h9M5+`T}?>T&+E4zn7{zM4(S6heN(8a^Sux-Tht!z4~n9XRNw zS8#%~*>m6Kow@9BTJsr-zWdhFScI^u+qnep7Pd3&j9xhyd|-^D8{(fv@w`4$rT#vw z|9t`|29AGC!~9riidOq5ZDun3Q)55IIyCn-NFDFjU2b+klkQt22y3r#15AFmsN!;Y zLxa&I6caJZ=TerbAxCtQMpUaJF0bcSXXGB&)ANw^yU&RFs(^dWv3oz`6w**OOZHc9 zGJ}o=P24l(7SY+*0R9=Ya7By`8~xZA_XYvq=3JF>^K*OJ6q)iqxYb#)GHz0IT?dXa zVE9S&?R1wKb+hCe;EfRn`-8Why>0}Q;`69)=(Lc5C^#c%iyj9&qL^qgpjx#!xN0=U zcDYH{u^Jri(77IsR1%F6D=Fj{2_ z6$SrDH6n81$xKNDO=qalt=e=ouW0`4JtUQZ0!Qplok%O4-JBR7zvEdvdopH+y6hW) znQ#djn`P9R80~AdBipYSgW^Wg53zcO&+-cAz0cbo+E*6Q)0!1(5zN%euBRE^t92_usb=(7mRa)Pns~?EhDcQHD{atOdgvk)df?3$iat=QxLN&S zgk6T*fM;xCPKfz?S*+Ffe_7+kpY-%z=Lpav=rHDYL5+fhSv_e_*lkk@u1jFda~Yix zZy;yk9PbsC-Hj)kTKCmYbzeUMg7-1x%=aXENpKU$`krzMeZxmVtKS8k2LBvhsq9kL z4KGM_7*_)IES)H5&(brnQ|0IG*Q}!K@t3ME?Y-w{uftr}+YpYMj71EXCrdlsc*5(D zrS9dR{-N!Al2nPlND)upS3x+k`^|AHt)KZnzdS1k-LwnvNWJbQFhwPK5~XA_)b>G7 zjY+FnkpF!rF!N^C)!OFv#p+|LN6Pm3laOjbOQYeSY$4PGnBV9t?XWEKCSpLB|A3|D z$3a_*u(O>OI2s@`?$r_|l z^$fId+>>zS%n$rt#FhN@{p5UH9w?bu!ie^Fh;{y7qT(zHY`ci{ftavtK*)Qw=Y@mD zZu7hCCj-qlj1ndZ1j4;y%I-WnZt|hnz(8$^^y0ugbz}L$+trx(`1pay+kAT%_rVr3 zbZ0OlxHw?P*eUy}ALS+}tQ+-YYA{zbu9g|Iv8fZ5zo;!quuqo0u{8Rz1d=6fMqqBr zVXhjm()~MVXZ`Wd2b`@U-@L*+;8@Ln9M*z-^&=)}A-h2%f9$72*m3(0ebGTdABOw; z|4M<;nS&$V0ETRn7TRhsX+_OcGj)?y%|mxMDNVlkE9i?e(-r;)`6~Ry-;{N7Ne>-fEBQahAh10?$XO=Z7IszYzoGe=lx-yE1SI&Hc|^J1wo1@*yK`D0t`U! z=ucEOm@AO?K&n8w548(Sjj-F_Vrl7<*hLHk8s+~?Et)CicyV zWrq_A>y7w+cZ7hepi;M%XT{%;n*`C8zOSR^jo^6u#n0LFi3ZHrM5ZAN+B)xiJP zS36hCa&>3K`thXT53CwT8V??jH=3`#v1W9xPmwv_M@ae5b%O*BH|oW4^2}p}4|NaYG$$Xt#fV)ibDqBki_sgi^Nk320ChIXF*>Wz4q}oy_N(Qi ziivCNjz@`KT=RAbn0HgF{CKOK3v};RH53bpXh$+A)IdZrOQ-eei`EgP8_K^wl5s|)Yd=XF&Loj-gjfyOM z9UO4X@O{dGxtfBkhWJl5_P z$}Q#}Z|}W{CiY$=F7_=;x39*Zx)t`rH_P9z zaI>kNyZK)vgze35bbNgD`>Xd=&Q<&_rZ!W9nO-IOA6AQ;7zup1S-5a&QJW3?`IGOO zTWL$=OI(|9ThvZXP1Sm^D*nRc*65w!Hw#S@%iofuOpksK9|+WU#hCZioZ}XLI}W?4 zml_yGd(M|_m43<9^&sr&jm$iKGv=SclUpG6(#akMw6UGbIE|s<;Tr13#*3~qs;o~2 zXCaY7x0epAN)@-`p1-q0X~pM3E;4_Qt69JQ>yXXY%B2?<=?bS#o%;IZ{d;-yG6!Ei z<4c6iA!Jo+EuPnM;K3Z$qr!Je-)68=+N%!rawrxxg;~+t1GS20U9)VbG77w7KZP~+ z@_1iWegFP_fNu+ZOK#}yedEz@W|0GnuOdJWE=FpJh?x2vrewZEf9m?w4uN zo5V~%VMmDD359-?wgAlLbEUWag)lvyy|P4WA{0OIyw1_aX7tYB;9!2q(C_TrQ}6Rd zr-g2`0NS^@RMmH(WXN23e+G9iBt)=Jk18xHCzlt-{-33Vg~iTmJK zDo%fM&~8c(bc@evYQLVBcrJNZ0#p>M$0sKztz_g}&r6(D?6L|FrYc7!bf`U+Ed8P! zsK@MT)_2Lq#wJ=qHl_Gw;bI|zHRIIt@7>*BEmWFVQaWa8Nz{X(3BA>`+^^?9MjV8{ z(hnP#I-D2EU)=S<1(&JeJGlpao_l6SH1YqYW+lQ=PpFJ7WN->!QX(*}bc2}BM(epZfmY-i@Vq$!6 zySrz=&z!lSpSV-#8k2j)=IT{kUVXij)gunpC-y(Z9n^}h8I@J%b+*oHDZ}t;Gl4&} zJ1Un%vAYh8TR6$d$*EI25vC_$B+}u}@rCT=N)r?fT|KYLaU2!p^=`zWgtxqDOE6wo z`xhzAduKi7d+SuK?^KbzynHiTu**;BFY9|rPo6x9;5AOFomgfR*8FxiJTrRcB6;Kf zd;YN1ZFNHS`L9ZoJnf6ig zRIU79K{#$jMa4!)Y5wH9p}V1r7Ooc@9QgJ@Klh8b#uuMjn#lA=NtaE03dK*$=M47Z z%I4PAhiWrh8=F->0idG<7vxtToqo2^`t=pwsPZ>&5-YtYYT^`?m1~Y&V3X2ThQp6r z>usI@5uYiu5L!swK6dA6(1Qm8fZNJ?YY0Ky!o&45YZKR0ISlny@z4Wn2Zv!fU?xUJ z>0O)aZEbCi4vuTQ#yr%i2!j_UQe2{E568AK$F}{V(&mFjIi@4JzSOw${(G(L zjLWH0`J&I5_7LCp^D4VuXc<47)_TbMN3{OA$3>=7FNQS`=fR)VMcI_Jqm{=a9e$ry zvz!jhp$RwdZHOXOQ+^AD8uWDq6;WX>Q$pd$S1DuD@{y7i5E540 z-QB-CJ=Z^WEeJ>VtQrd?qHn#KTHjfp|C@8LlXKgtg1c%J+ItoxzidG|mY(Vgyy)SIwZrEHxhKKdeqXvm8Vz{QPH zcE3yatf=VP^&2;oMCmUVj;-;e_o@twYJD~rj3!gG?9VI4Rmde^BZiY~aKehXQLSHV z(y&^{6p8bW?`Z`E$z=Qexw5dd6foi*+A@4(rFijoqWTa_l}gDSqLx9q3$xtH$|1M0 z`#xv#rK8aTtZBrt=(@ii^-Zo~nL-vpjsDHkYtYkA&!#VAg16%>5hh1xKb=3`d_rQR zfH1ebcW+V!X_~Zn7?yey;R56*#)2td=pCq@^)gIIol?d{zz za}6RIls)0c!^6wfFRA?S0Y`!Cl$qj^E(mVN9rh!)dUGX=+mas?6l9S7IAohPWOnS@ zP(p%`b}=QqYiUr$SW)N-mf$LDauxS*^cx8jn*aX&`{j>D%kQ#D%!&`hrc$}r6F<9rl1S?9M9CDH8^<1)rfH>Ssl%c~kSSI^Su?V!o#cToL#ap?ZEcA74jl-~ zfq=~nZpgUf6Ad2^4ny|WuNtTSise-N{OWzk%Y^hTe7wA7z_lWBNUx*UIhRRpn3JYi z!Wc(pw;uoeC$6Hm5+)b7(B@KWiBa5HaCUphMht$uolIFE9jq?~BNFz9UtDcSZC}*HOITk1nLZ4;l z=O%lRDXKX-@}#DuD3B}CWiMS(jMbo0Nn}OBlJi2qzu~L}uQadybhhAWSaIJ&UNf&q z<<2%L?YPynefjTX?I7Q8cK0rF6>=gXB5|)}G8)>#is%0d=pWn3o^L;$HoSN5L`zXk zqi@xOKWzk`l=*b2u<&ZLWs+)s*r-#-jX~*%=CjFW6>aULY4@b0nS`Hiqu;roRx}PQPNyhqhYDdwYv{cz7gdX2yqy zV^dL6=e>JJj2F>5m?Qn{L)P!#79cE&W+`dNtKPmXA|taN^!nY(&Ec$wBFCNj!Jv)2 z)6>(Fh{g*$TN|6XF`>qP-zt=9;Kc&Z_>KFE*BiG1AV?wF; z2Umd(M|f;R4SL)IM-Ig4Wn4e6y--mA^Jg|mz|m#m6gS~u(+64SxJVA zi_0w_0P93s{`TupoA0|n*S+yIyHa+3+Pt3`%2RszI`Ow_ZfR+6#hhbR?CxH+Qkl^R zsqEp*MfcaQp9H?2=&(mZ(RheqJ7a~S*%=u-0m6?Q9b21%P7rDr%%){V(t!JZc9M zsj2DD!QlPsr$xoZu0-2Ep5y6J!8>|=aS9G$PMUwh>hCB{@k$!w@`^7wAt@caYT7lRb37F(Vh2hDN&@&bb`+ zVftQz6H}~-`rs>)Nqq(D2)(;^RbVmVVOg98$3w2>yE zfy8TV^G{wpC0~yG2ldR%GW-svd@j`ThrdVrov4SgBJY3_9dP<@Wh9+L#@ouuN(-f> zs*1-Pd}zJw#rNDZFK{R5fJH8tF+M&%m-}m`&Bx=V(Tf|z^FixJuh86Y4Bv*H5U@c{ zAj84p;NVzZUT&G0VSVuMVZMe?JR*hcI`p_`;Hc$gC>KKau=zUacLgimPd3lsjbGgP z?~(8!_RAg`uFVklR!!Qk-cw*>BU5at;%^sD7+CaJam)}ypez~26X$gmr{0hqQ}Jx*f1nf+a*?sln@SjRHWrfD&>+3} zQNAs^$PqAV1)1gGB^STc0wcg5nOQ3CJ3_(^-*jlCLW# zoZZA3;n(GrmDU)R;Mmz&YxO-wb_FUGX8DTAb!KKdI$cdED)#94x)8iAo$F8J`m3Cq zUPSA2MC|=XB?GSSm*rLpW@KjaWcC+96S)GlK9lU3>-AUHL!WBY6-!2vInj{j>H_anw%=H|^Ph=SVq`AG;)lTLTkl=S^>45&2+ ziFx|7*(0`<_Y=;vmcd7hn}dCQ{1pf0P~_+s71Z zHkp_H-{t}Jiqa?g{NWW6BFz+g9NuB0U~Ehah3*opo~{LjbTY+DZ;VSvpFqca4ex?O zgH0d`DZyhq?Z?>l$|P<5@|f=1mh_Pei^v9+qHsm!7cX86K~cIAnH;DPxis}SLb15&nS4Dp_z4Af`d?8X7ot&*+6wwl~s*d-q>2+ zs8gPP$!WPzx{zgbhfQm?%z3S=ME;)sfI2cvyEpiF1$}gxA}k$6c`gmi0%(8v z>XoSv{ov@{okZBpPk?qu%-5-3eR5lYo$EbXYw=UwCKj2|%pI-aBT~f0<1e{=Om^&KpBs*muos#w{qfs>$^=isdG;_^@x5 z*p1q0R7|Ase5NfyESF87Qg_VE%nVqZX^oIu@{=vX{b6$*Usn-{*PmR3n4|@9 znsbz3H`5{*;`LNog-p`UP?+udE{sfZb#1K%c!(O32RE7L;AO##`|F;80abXMusa*D zo0^)K>9qni%sJT$ucp~VE%`A@dLd&-SvrSw4Ii=EMr#x*>gkcw)6*xX?GJl$4DQ0_ zA}0z`L;~)&k?D(cf3p6S!>nxohR0JC-rn9`p??PlEU{hngV{1f@f{Q&UjtO+g1Ld4 zA@d%$*T!z(eV*C~I+XSPO9!Ras(PX==@uiJTkz6hZf)(Y#jj_)oFqx}!2~n$*Pl%H zR5_2w#8+bH%-3Nf-dDTEGIm^8D0sguEgdCpx1&@*KgRx0p( z5Wic~1nwojem#COwuGh(KQx|JXfBQ`JDD?s;&N}5gR?V^R*2zm)^D**!w&yEP1LUf zV27vCRAN->nijxMG28!Ox7niJV^OU^68eSslhqdmn_^lc|F7( zadaeD8qDdMbZusef77Ifl$e~FYAlZ$B4nUVnm@;D3HkcH5y_fvKT)rnSb#hoM2OS1 zhpA{#_f|z*->+~>1dy(_ws$Oz;Ai8M`HMvmX-$V&fK^o#u=K_o18#Y5{356^6IiQz zCStZ3w*zp~%F(fB?Z@oUNmh-7_KXTLjTRvMxm2my^2Gj2t~!jY@nCJ z4Ia>kaovhb`au+qsGdluua^K_q|I5(*3a(>)Lp(`Q!cd&-TM>O5AAij;v#i|Rt>ON z{`_*e1&Twi_#E_Gy2eJ*}+G^;c<>h{24u~s;U}N^Nr)r<&}4nLEaF#aU+7( zGLW3HD{7sCE;9LQ?c|vPG~`2EQo=DR#;(Lm+%HN_icQikJC5?G%rui)-R8edjfD?e zQ66*SpBV}-A;oemDrb^lXHRfe>7| zas^>?>p2$^yR)lndvf|*Y&FJLj|w;1I?3DHyR+tRxgwm&_UjH}<9W%+Jb&+Rs<#Si zVT11G^r5(jw{)bMyq316`=%iDjn8}^9W8mk^Y1bWM1!5k{qn zrsqxEC`{i6!QftBf0X8Z67SRNUGAGaE0ToF;z=ixp%3j=f0M92x1Y$3Z*4!q-wX|$ zV@7CqkJq;0b=X~Zm>widy&a#UqbDSB0U3xh{uy3XMs9&fey{N z`05%*(@_mvAsq|L0jdX@(D?fP3&E@x8h!_1zDuut5QhPsLV|)eHa6JTo)hq<@-FUd z@bU6)2-6XVkcN^>iW2|`yM1zee4Z{v@ZyP*(j`HQ2JQo4o9HQ*+m@Cr$H&LX+1W`u zJ06CHhQ7_4!{zJs+no%0#>O#_`XqoMniL#X4JgOQ@OQjRX`+p~tj>VoL)1G>|Lv5- z34Y|t z{re{h&AY)-RJ-`bHEP4>m$R3wYoeQVKpg{B`wFP21SQJO?@fkAMmTz|bS!!(6q-r( zIMtX9|Nfl>h4K5?SeNyS?YyF*KVcs}d=ToEAt{09axo{qab%}H+1=Bl0Gp=|C3lq) zdf@Wkzsi8g0K)O|@#z^FekgkVohlnvw)E*%`{78=d89$Hwz@?@pRgtYry=>>@xw~~ zwWd$nPbxH(kR`*XSra-s?O5|O2(}jc9EckiE1R3?BZ`u&T3TA-emizw2i`^jFNb(VI6r{7pn+tm&YEPD2jy7F7GVI$B!Vi-Vz|At?`1PBKxg z2zyg#QQa~x>e_du@$m887r#=2;G3V9*E%R`gc_km{Qcd?;8M!~a8orTB&1uGfX&d} zzK}lDcFI-WnuE32=<$MhlC`OrRivOHPBUBIx$hkIRu}-P0^yrCZzlBE{Ul+%HoyS7 zOC82sBE8rmfo^rA6fY_G(-mdNLWVZa`gnGo{9mkV|Tr`O=D2)$FCAte3vnH zoT=%Nc)PFwrmCU2e?p}Q5to(C{@(OfMMZ^e1ko7&5mA?4^4LHp=uajPH3cSa+wW> zzxM~3;`m-xaYF-R$WeMooKWB_QE-}bT$@u3y0{o0>fp=F%!pB^#%rGQ)IW4Mhfe@} zLjn9X7}s@hvFA+m(G`N^i*V68`czi~Y8-g#%*%&?DIN@GXJ@fDwUI$ynWmD zkU(c)Bb(U0rT zymiMV;Ph}iGMEH2lI~se@#8rq8)sf>e!e{btM-fIiVJ@acXz#v7@P2Vw^?lO^`F!p zo$sM^LJ)4u{B4rZ$jFGe=O1F=XuJoyRASdW2v2j(WO7@;9;9tCim?q>2 z@3BK8**>Gm51?=Ru9g(fWmw8dNyURUL45ggtId1vcuRZefq3)t^We#0BkW*vCPdkB zI*8Kukm$gl0!5DBjg_4P!S#X@v>B!ye%1JwP{TQ3D(29*c;wXwgGbVX^N?m4Zwd++ z67z3l_Ve?5nUSF}(~WNT`O{V14I&WuIve;@nF78kvyYBuZ?j$N=Gp26dEds=yZ`H! z6?vdU{=pf4uLZ-M3u<&YnIbHc+IaMv#0Bw0)d+}MVnYa4r>|?l`?LGXx2sTdI3L&h zW-rZp)Pvdr%m(9^0H}?M!mYUQba4>`jAdl0n{ct({wT(vCPY`l3;mX z8r&UP+vDcpQ7|x|#FY8t8c_8*dY*IH(>n$xOEO$VVryrqWqqE+gaw;_bZ>9(X(H7@Z3@%!`Zyq=Tcj7 z=Vi=pkFjp@*U_kt#t6f1(MTFZm$9p+YFI_V5_jYmyX!aO&~$nOK`JV^`@G{|3 z;UaX+&B2?F1ph|QDBw>0kW-D7spDGTQzj|A+DWE^uMNDZDF4IRnC1tf^qUEfZogMz zWM)3^fZ3MQs$ZAlB71t&VKIOjEIbpehy+eLG(4O#lY+|}4+sg0?w62aDiwwNVfp;w z7AxVFSvM=-5iYg&s^pC$8x^x0Vgj+7smYOn_F-j;`Zm{J@gmu->Q9b{CPJ>0Z2D-x z$A%&dm_u8ML9wu;WQNzUFl=7iz(7V=L6+ZeiJt@FDk%p z+UC6#;30UGpvb|p2E}u-*3~jSStsg6lv*-1Cl0A9l^DsKDx`?s6{1by}Dm5KR_hh@TSI8e5pgqme3Bnd8jh72+k zRD{#57`ZQ9vit9!>^-WU*n%CDUt3G-9iU%cbE)$B0CZ)(|{^V6H5KL z33RzHeR4m6l{q;PN=Qh&DKGB?4r9AdCIW9CCSmXyyIN=6BDILNke4N5?WUr?F9)IZ zJvB5m{*g*=wUByA-k*C{@&gpyUSP`?=dhv;_Rl#`>>zL{3VwR*;?fC!L@8+Jn4zkz zJ&=L#p+{v6`=_oh7T~i<*^lJ0aUh)qg@tUuf+i*=f=P++BCz05Kd6>i-qz=vSD$mKQH{D?ihJp-L28Q-x%AB}wp}EmeS~r_7 zn)uHS_V)5BDoDXRjP9{BGyaLMqKE12HsX@GpFcC)e#+d@(h@o*m`uj*n3bJn33tiV z1wjJNnmfu)+Tbpp%N+dLjWjD0e0q;dBy#C!;yIU2@Bsj)2#=@sja$-BVc8b8`v z*TCRX(maLOwNwq<{NZJ;f+?3>DjLdMu*G*5vs3h+ribkAxLD0xgV@ ze#*W|Jr|nwv*y*jcw5!GX<8{=oMw9Y8HuJtTij%dyV%qecL2E2YmMOXJnsGab!)F8 zM26R02#K8p9s>OH!mSB@%1aCh6JaJQf7B@jJfdgMDEbBl0AhSw0ALWOXq&rk96EvE4)}g%S!IEy*FSy!4A`F5Ed(e`XJ;oxl}qe@Du*v_P5Z1o5CVRh zJDLNVZsHB3e5(1wpJlmk-5PtuI1|tQmwHZ32*H4OO&s(P@dkTn^Rq~DOZp9&C5qmv zo{G0r6eL4RaBAo$s5>@vUM!YbEUp@0)Gg!&)FkhHFXOTZVlR15QZ3CRv znbn& z7jMYq=ouJpBHGeEJfy?RIsC%qw%K@~$|*RQBZs-oV)NO2$gWs{2fus{h6~0=P}uET zTV36PG1a-@+bkWBJ+&1p2dL6Q~9+#s~YzttzhD8&<_^&kr|H2QTZ+n{W`s!*p)G9Nx zpBb2<5Ap`xl`C=gF0wn`w`lZ7S#6lV|FZ6#-`L0m%?LcNr`;zO+7El^zKSSkR`UKr{_tc4oTmG8^_1t535CpBP=hD z$DTD5=J?JLR7^d5x4gF24s$^4f@jRyGoPniFe?@VLm=HXpRIZosi&X)lT0yaH!Ab~X3Eqmgdj80?1&>svmX-- zFs>^C4)^!%oxwyO5TmUJyLP25z-xIya}drN*cEP=al;@;@~1` zN)v98#Mt)VR3YCZ+zz*&xRNyAiG`D7*g-2`BzhY8u-z$4h-XYfn|nAQNKIX_37u!9BC3{xRpfE@xOU!bd3uWf5?xrbAkx2?FUXC zF|PrZt(|NP&mjv>NFatD?57e^<#x1V?>ybaB>B2Io`ntP$&)9rEfV~4Jn;1u&w^9Y z#)R%@rX3^%6x#!E&sRUY+AGG)J$)8ZQHhsP)IPus8~N8SbMT7*HRDh>0m$<568&TQ zB4TcCF8KuTAkFX*X4mWybFr50S}H-($lBVvB?u;mwm+(iW-|s#oR@KhUqI66%V{fI zRN>Zc&c&&Yfyyti7glP2`>(NJ{KTH;2Ad~Lg#Ute9@8$rl@A z+de+GKp+s2lHv=nYBg99BLn4xTqriZZ8auNx!Parsq1lSxMEhaL9fwqlZn9AV!}+9 zY+!Ek&XzQb(WoE#L3XB#aK&Og?X7_uc6DD1Avtu|?;6apVh)in-;Meu8xelFaDl%> zkroxC^y>%6K#8q_cS|-)s_J8u^=Jo5>IcrI&*V8?J zT%{(we*`H>TZ^I9=a8%X1CL!=RqsW^tV!Is^T&A1IaZ`lMg@ioX5L*h$qud*&2j6( z01u#eXl{0hKLVzN6yTk4;?xP}&XyL$+qb9le#Gs$Z{HH0oxLC7`Y#CF)!_7z3R*qK zaU(DHmso`>C*}WwQZywFTT@YOH;LGk6O?Bd5>+9qX$9d);`YPECtPdTbq*M9(ON7s zLedHu9*WTxS|M4q4RzG&U}Fk&yD*S!FfK7n-_1Y_PNaDloPxP%2AAYtO+Yl>OwGf> zdMM7AWO7-6cYy+X_}>Yvy3nPgmvJ5NXhK{K3`Qq-lTyq zzdcTRIxDcG>+mDd)qj_m<^%qM#zI3w!-`^um|jYHI)0-Ci_d#GQPG86hjjAp`PK&mDc&EavL(&vWceQDY^sB)1cwb z`>Tbk&;opHHfVh<_!+lNTzzva9bS%bTG_mKJpaAfx1zopQYLI&2o z@X3_w_QB{4lRe*jbE zZ9gVrsTwUvQ#GO>e^5v03|QF2WLco9CPO!fC_FbdB+A51rL&1I$kLaZw9B1pVYh|F z-qeU$NHVHG^=5Hf)3(xW;8 zjr6z!Lg_;6DqqgV$Hzl3s_C&$_R?8!Nh?i%w3!><-pkQ0RgVPM6Zxf#tSn_X4jPDB zC5Tpw#T1xrI2wWv&`4oT?;U=bQ9Km0T%)?Rs~jAcK%7wM2x7%i*g7}Rjm72f{W&vl z_uT4hg_9rRocz>At&%f=GUEDPY4U2s>h>rVrzGuS+w+ah^NkQthBohy#Zll-PfuS|8(RkLX|Xn}+gA>9QMjI3b(L#R z5!|kObx9GKmYzO5HFX(<*45X?&L5^5S$jFMq8tz)^LL`# zz}5%rqq2NY4k#MX)}a+I@}L811z5j$SU4Y};)R^vIUJFB5Mrw_(n9(RVgOaRbcSQZSrv~fJA5#RA3vnL$1mE`0LlNZQ!(kq`;Uu z=A)p11@cPx#sv(gWhQ63aYofGSP+rL0_7zpA?Ylzaj>w+-k61r&dq#6<(-*Vl@zz_G@&}NirzDtiSj15OwDUqG66qa8MH<~J^)V1aBMRmOboqR zS5FV?^Hfq(ldO52oAs3JFOX+p*)xF;KDOw3-^7GYbd%Y{T}tCcp(7`@+{6}@H1L>% zA3^0A85w_ph`>~t(LKtDybdM>vOdgVHNW8xhnTuYuj$uj>2_%ZnZ%A>>Rb&rcFoDm zZ2$F(5&Qsn*%Z%h%-|t_u@fBc0^B9#`E$yHj`z&NP4t65d3D&@ecz{S;u2Pgz>VBR zXd^UmEZKTeo}nqb+h1DK85$c`ybtUJX9RE%bSrxy>F3A~W&&_cL*wH}5X!tHfkk16 z{)Z2d9UUqdi}23Z0GCw|JwOP9RRaPMB*b$a{ikmITwQenBMol~h~ie?jX|8U>sQto z8o4gSs8!D46umg;`FD2sjfFotPw0C9Mv{X}$->(vI&z3k%^hyfPd5f0RgKBrG!&gm zw{j6{Iw@4%ig+z$h+~P$)X5Ewc$@=?TCj4Ekbb`?ypvuDW>WK-`@OZy{}Ny#fW+S)UM2-OwzP3(^?2zV*wNQ5Ab zP?r2fc@8~)v{WApU-<0Vvt07|KYt#8=fXpKCO)sePQbO16LRj?*Vo7CV93JuP^8ph z>-!axP4P%Xa+KJoJu&;xbjW< zsf6m6wMNiX+lvA27D1k+Z{8pVcYljgSwellye9xLdCkq!uKs4$XP9IbFsgUrevtLF zOQb-dVYxjIX7dI!a(`ng9+)tP(*e06k{M2Jm@Iw!wuywbetPRJ%(MPJn`gN=q|EI9 zV<8aEgW54_*k7o^M)WuAMz`Lp|8fkFeNLf>KB3+gKY?+jS|dgkT{pkRS1hgTN< zh84`D7>MCi>IEP$q&JCKhW_LI2BQ0Z>_^P4FExSqVnh+e2M?}^C$&Qw!Y~I^QoN?q zMWK)Z2T@t780${Je^D3y;MeEq+_^(}8SfHZGy(T_V^<>18LSI#KhEZdim_vh9V=dK ziynRgTE>dx8g|P~FXqKF>`i}DwhFcXeETs@v8UM>iK3!qn(mHgMJnVw zLXU*Ct?QC|aPaws6bxM6 zffg04C_BE{<&)`}DL=_h?Stm_XR<|6DN9X~^Xm7_r9C`@C)9iYl-tYq@-V?>>?x z%=LvMStv!TF%pYS`P<#GTPT*kw@GMj0N}P=NqOMso$Rj@1yuJA40JO2{F-f?0N;-7 z)-9j=vRe!U(bmbJ1cB$?(*-IOfbS(bdV18G3g6;oP9mTRSRFwy0?acA@)G2t7!MBuL@HN9^OADVMH}c-qEtEqG=yj__37y2eg{e4o%= zQTy>D99fNC0vAoD5Ip<8_t<*!93`DmBwNEOlF5sCTveO*H0{9*5Ng=M#*9G3@PAsk zL4sk+U*Kcs#uzHn~(}fv`XmzSl{k2)c zx`8zVXE0b)3w-;Y1%eO+ZovK+stY>V=eiPIk}yj)AI*x~h0-(4Ku9NP;^{>X*+X35d6b?*WrCZT7XJ0eg&DOe95lG-gKCOJbzJDpeYJ^ zAC^HYyL*4hn>X?hHH64SFJy>v3LMS+f4@k8RMU^Kv4bgi58Jxr2ZpG*7)6kv3+%3{ zj4gUtLzQ??JyC(M{P6p57J?^rU`~Qj2UcqP$IZ31h*m2Yj6ksAKo2J<6=S+nAie^_ zt4Ims0xm5ax$Vv|LY|0`6{_~dnG;nDBch;bBJWCvyTGr{=jF~X!8(l?raP*3ada%X z^{Hc58p10>)6=Ao|Abou@glTv{P`6fFTIK}Tlie^+pEUAa9Y~C$=WlsnW9V=v+AW7)p`lO^P+)h9!I3%Vq3AbTs{#a&-~;zZX8J~Ee|(dTv@X@}-QCrTOA~hf z<(HX@8DR3U?395Q_u4Q-xGJ7Qz!_xb7GPo-yd7)Q`%PeI05OM24?h-BMNCu$PX1s9 zfWgIu4>k!_S&RXe$~Ye>-H0_e$=Tj>0qVp;@n;a2C$&hj`)dz*#`y5WeZ?yY>%M zWZ(J3Tj55&keR=gwuL4b?lJoRbs7=|1+$rSa`Zz6gZB}Ya_ z_aY%^8LS?z@~h%wO#3Y4KU$&uKu||mPL8y6lrW|pt9YbduvHbg{b>>GUrZobMg~+T z5}14;Zii=B7eot98g&Nn5z^1?PBoo&t&dqj7`29?ef^c9MZEM{GG??A0rj;FT&8@% zw^#A=-o2ovvPsDLDdxz2SdGCx3$Png4sIYewVd|cXLqzZN>yxv&(+915O*H|A=%C+74_4g!Uhx1DtX{)#uMr&Q98Q?^451tFqpgvfAIr#;W<-6>|~;CN|X*!P8Sy zXCZ#sG5rtPp{9Y3H#|BT1$DhXhL$F#Jq+_~baYN0k2%#q{f>bIIfxLN-*zFS2%{Lh z6*PYtAmBEDg0rK_gro;SuxmegO^9ItFde0*uOANU8#X}U7ns>UpWsGYvi*Pr%aZs2 zA*)vO#&h=Y|M}#zZfZ>m(HX(iIBajj??MQ|ccm~LqQ{9ClUu*si5=wZx7Yt|W1_-v z_|GO-rf+`n=UdfyYS(>dM4>TMsLY5c+WL*uM%{cf197xYXF!&SVpeA6Ne7%{YO(S6 z@0XdG++Xu?Jl>y~fR0%(m?$DKV_yI1N6i}_8bBxl)&WxnS3tM1xc$~dWe*<@4`7R~ z9(jW_NtgTYiFknWfm^NkJV!n`C|e^no(F7CTXf*{v2Rf;QpAxqap87&=HGkG@F^Sh zVRv`ecQMsCIVC0R_}Cvat)NbMGyOS+Ou#98z%dM6()3`!xw2@-_04z2K^wCgGk~JS zO_2FK=MfNiJeCoy9?Oj?2NP8GZ1duL^BZ4Qp*X~uz*UCmWB)h^b&!W|vl3Pgx~~D< z&(re;KMm3G$%$=7lPDyo6v%Yp#ee9JBBHH)G$shc7VzmdzP{oQ&blZUB@2_~A0X6( zC@7_j*un7~Mih*uK9zy288Yrgre&@}Q0|$&ftMoG0JlGVS1^a?LFg4@TVsxldr>~! z{cmp%bAA=rRbi9s+T)i!^93s#7t`*YTKGJ9Ql@^g)gqkWBT_c(&vmd zb?m|2-Voqw!IjXvyz9HzZ#9L>fqn_{GbFT=L!2f>HEtBjH|23K~kyX3F;iPrmj zoq8_89NV(rJu5rRCZ#0#3pA|Z+O0d>;n2%sYg!IE9#rRn-3}7@kb@{@k`I!ufNJ%t zmQz`gGvXvr7?(FTqWd2_Z~Qi|N_h~Od~^6@%rZnKcOCq+J=D8TpFVvpyH_i#KJp=J z%%um?m$R1VJL%IwaH3Ia>X`NaCVmujbVz{_!cZ0<4UXdtSZQ>Ls+w9_Kn_Eu#L_@# zwjgJ5U^Fl=z@+K`c7YmdU=!8|ZZkz>mbRoSo<<5^6ekoy^(wBnv0>SMc$c8a zz~jDDxnq?AuNf>Mn45v5{&koA7sE5;yYRn({dJt4Hdy}CsXyw7X=_t#UJiokcqrCm zvD~k#2yz-)MA`fX7;?~fl&p~Xzm{4`_OBBE)l22=Qu!90YMrw8U_J2OrRK2 z2QarLCB*<%2uyK3buyEsfa(iv8Jg7mt^DKHHtkSb|iMWd3`vaaXBmOHi%$?I`r(E1|s$q z6)_Xes>a6YwSuam5QYUVmRne8-~XeOKA184ML>$a@8kI)DZ@5vg z%KkTC_FE$x0@~7p?T{6QP?a33Z$BdH3xs_aZpBk_-@FY3_|qqPgc}^v_?Hi&T2kG$ z7QF265HJ3{-V9uth6x74k%y6F;IMr7APR~FJ2Y-k3xBi|6KIY6Rx}6$m<6e@cG!H- zhO@LE{(49RQCIhkUlQ;&Acw(#rP_6NQ0JhM;X~~lTl8J@sK;1y0J+NiS^!(ZjkH5d z1;#E`?i(j-a#ueiBv1v(iW>)petT|d0l-oq!xrq*DkS>EjhgWT6o5}PKl|}0`*wZa zRhCFHx#<(k0IGU_p5xCo3yiK70!88=ERs}I1F-OZ$Y#Lw$z9GaxFSgCz{;ab>@3i* zCc;G4L5Kp$qHz))G9+98(mjPj`9!5p2_*N%`s2HI?>-wlhH{wy<_!`vW2|VJ0u%I* zP=v$1Kd3GU2?^yx_6CxdFn?p%Hp0=KXO2%zk?<^{BA1Lf+L}|SYOf$8@@uuB+I=w% ze{J}7|NLb_so#6SIU&twuvdzT@SJKgn!sDTkiBtZmqeoT3J;o_5b%xfJ_I;}Wz6p> zBE2M;JUl(&y-|(fZpA5sumG0>Ib4Jh&ILd=*u1u@2AjQLtpLQpq~$@?uT-=w9e=|fRCPy?&9?0rCX+z8o3f4``xtjS>4Aq z=<0?-Pf;e(5d+g4)ZvD^))*=$B0|2q4AT!#O3%*Dz!8AKV&aopeIui25W%5~1dK3n zScB&V6XT%yJlY4&XAPVMGO$l4Bl`XIHi!rb+Kgwf7Qg?T-kPeM`s=ou>#YCguz1QiR$)*1AdVPXl6N4cCX zct3oCv3__Mxa0@3^$d+Z#L$l)(OQ{evoNwuo^vakdn_ahhdlsCF8Cu;o~ezg*n01-4Dz^5X*e5<)n?7AOvyP7sM{P68#d51v=XTm@!>B zJ2?nB0NF$-`*9>0MmmK4_xJB)jV9=3Kt$P)*wHaD;I&@4%PB*K$&JIc!BiaJ|L(bf zNHUny$E2u%f|Cr&q#8}UCN3@}onb-l1!s0_CQu+?OF@0DeE@rtr||~q^LgIEvwMwN2Y*il9n*d!c$B zA8#7yw25G%v7Em;E}oV$oXR9c=Zq95#bIo}9QJY?3pnnz>kq9WCrGt8(A zxWu2T{(?3IfY^GzGqE=b#0Bfow|7CO(&*XORO)ij^GMJe_>0XUb7(kYAj-qd9co0w zG>a$T8@qh@^c!c6lmj%g$lgUoVY)8>@}DK0!JK|SChkirLj0UoVb!AIpls^1&qYLs zO`OYglgvZKmrIxdF%B{$D;bjWPf%>vyy+{6RBJk6;!CBY880K+R=m(KxC&MEQycys z7|>ulgn?EJl+6ah$Ll9_UGA7A34zET6_yp_Y}ICEbvs}A+|N(_?lUE*afU-|U-YKH zQ$Yr1W-%3)zzpj|8-!{UnqjrIc>CZ*0{fSlOJCXLEOFVdHj_6Td>hKbXZD>*12N-s z3KyjbJcF~H2{?YVsk-|4*bRg%H3X|>_xwQyiq++QK}}u}Eu0O94SlhBuPpWwmJY&% zq77gbpc%}xI8@wDDJf{bkH*SX_-T|}U4;T=Eq^{47#y630~#^C%*jc=fveo2ksiWL zu-mG-7BQJS6_t)E-@xo8awHBg9^(GQimR(7%f)tB`B@VraOp4Ui$~P6@GX(Udb{6r z!*qIXg8KqPosh`Wi2MTp`%k>(>0B{rVy-vFrETD-o8YZp0G3^Ce?Ps7oEOIs?6p01 zI^t_je)JReR>heX6c-gC_z89(KM9A8<-#VjeGI2Qyt8a(o^_)GHD~MO%yDdG+gDgj zEE-P5!^Xwk32p)c1{xzVF)`U#0JL!Di7FNEqI(co`_xl`;Qh;E+QI$sV;-C2_XwTg zf`Wob@u18ha$Ta~JZ!m;o~}Xd?kq}TJW5kf@OB=*SsIz|&J8+L$gCa&ZuX-{lUYd7e`t7iX5d0s@WS946If z{A4}g;0Z2EIEh2)XJO4NNL&NaBSYe7uJrVCN)K{S5n==u0Ac{OFr5@i)K8mcSl!@K z-vqxw_{Q^db4g$f4h|0T4~tK~69FiMa|9qf%|_7)g&A{u$5%=?_8AyQz>-{+(&H-G5F2gRB zhMD4B`%%^oKYc7#whQ1jaH7iz>crSVPa!xkQr>@)_tMs`k|Aec8=kpPv&eJw`rbhct4zK%3Xk;}qwF*W8N>O_}2vbJ%QK7p6w_2fyqDvZltaM@!0Z)gMY}!5Q6)z>1zR=|k1YLA1Kx?qcJ2hoPYqOGtcFp&w{Z#!*fjJ<_V*v>RIuM;!kp4fOzB?St{{8<( z86{+s6p_70$O_rndxq?lQCS(;$rdUjD@rJPZy_tUm8}~gJ3H%lUeD+F{*J@ZKTl6x zUDtb@=WCre?@&gqDBCKv0zd%F-OIw_T8B5OQ1vPp8^8My7~5gF<pkCnL z`ir+eLn7)SZ>sZ<;4g1_2x6g+y+s)nWNrAEF2&&GSWuqH9ww#3QfZ1(0MOKd=lfdr{Ysy#N zB&Ik`;mpFt=BV-wcEGa%{&VGX<_)rzj>puBO8GI>8$+K1nRvJo)ywoJ{ z*d2HS{b{tx^MF8CaGUxChwttiT8Ylo`rSwFzy>p(2|zyY)-0Z$C*&o(%9ZO@ki z&X%f}7Qs3?I5w8@R7_qgq$?{CXLf=w4LEU|X2GY?%u5LU8$jQn z3?Z92b80K)M7{_>z1A})@cST?=<_5=v^*K3Ij!(894CO9F_Pf3W=Mg}7?k#HLpJCi z50qp0R9Cfv)N3A*5PzbO-I+6|P4&($gzuh>ObXcs!v4Yk9x@B0;XrI$bEO+$f7kOk zO_2#3jya%D+BXe3YXuhHs8>K>4MA~}!<0^ZNQIRF+l=^Ur8CltqQ4@gILO35m5~w?5w)%hb8CMd4K!lkXEU5D z-JKgExvne^Niie7#6PG{{Jwq04uGLix&S4P!NE{CVrQ)Q&~Wq_sPlQQOZeyrC>_Da zfd;GWwx3sqf(YF=;JPg3^|bghF5fFDCokC%CvKX}-1b)WY2*iJX-^WXw* zUh(|!T2_hzPE07JkQ_GfAl}{=APnX*u0)cdUd~d%3$POeIw5u8xlXe-;an;C;s4)7 z_5;1FBy5jTx66)mr2gelAbOxgqVSwic*ckh%XuX4yckS`1VyEA<7^%IjhEs8&I|Vd z_Iu8Zk>oe*x47QD{6V!z^$icM$Z8XAupWLEp#)o&fEf!LUFWZ@Uv1TJYHDgcb}Lo| zgBIME;JVS@o&pc!XQK*sDjQPSP$}jplVk?5-^W!S7KCJ+zU$Ly;X~3vw+;f*Z zPG$4?hm4zB;+Z7JU`sOG`*RIzU`NF7kQag_-jKi5F*S{T^MK=lYa%i5>g3=DFu}E_b@pOKA4%ab`7_MsG*!*F zVuV!9B4iuTkb>^Y!++fYlW{3PIhnVYKn^O3p*CJZJZWuJC6*deS-f#A{uX4Kf&TjX z`i(miL|U-4&*wq#e+;=Ghma7@#9yMgvcBGDr&=|z1VRxKkr)ubCMI14(@?HnYo(xd zu@^Vtii+6a>pmNm@7|fwF$%2YG5|#9PWIZun?#J9P`b1?LiYz~Uzgg84mUdNAQT`j z9`?Wa3kvcVP*DA9BzdvODU_v&M8yPp-kr2xV@gee;_P{=blF=XP zmlE;wlO0#Z{du^NewN#7w|e*hz7M*wylER)JAl!g_)7)$UNN#Zr2J~Y$?)5Qtrw0H zaeDYsrzPj?buu4_eGD|G(0&ojZ2~@_qma{M()(sRC)|sZf)VpZ$oqS0M;?Q1Qfr3oi53q%!IK31OE175yH%Yl+=+*fStHg zIEwmTX#_Bl22HyR7`vXqhuJEA*1*9qwf^)j++E;Gto^*Uu<$6Ma~8jM|9XyzJN2KI zSgbFO6usDRqA|P>lvAJ!=C~;ld&%z-8;C`$`|>6CKC%G%tc)BRlu><+yJ(fzQ;@d) z(dPh51o*z*RDOXl4nz>oOFb-Ppj%AW=@ucMQ)=mk7kPfJQ5;t{gKLG+wsgnqwaqPE|xe=>J=9 zy^EP$XjuyuAm~;FH(SA_T_1qyr9tx_(M~FN zU$2^eIteQ9>R&w&MDvsUM#$mmna6K{klcjBc$bO9X$um>nmx_<)UD9I&e z^$x(`b%wP8JHVE52y(;DguNgahwq0{3U8Ajppz>hYnBNvbiVFbma|uOrc~B8@j8OT)H70u12(!;cd6|>4r}RmU z^R{FIj~n>^+m?1LfU1J~tOp&Yd{@E!IB2A{oBejsN>%ff%RAaAXI zErKN5>H@OTLJj5$y*GnSc3x<5C#~4vda74uz zHCnN6vAILc!!a4eNCeoIU(W@`?{rzk{2%(f@4hi8B?)*6XC9~73BDzBZAiHCaV@b> zpV%Q=Gj)1wX$Sm`v{2A~+IJjJA%@}+VUH>+DN$c+`e^B3q~OP1I1r(X_pl+O_?tv$ zS4Vv~lfltF0oO#}NSK*IreIlAJ-CGyCs5#J0}X*f{}E z49`(Jzb+ah%S!(JpPbGLXWpv&CclnC;X4G|@!r zaHxQhv=q3=+P6VVpN8*8n=Q+SlKrnGw|p9bJMNIzwcwrcZBCmM@O7%S3GlN)-Tf3! zfS{$LWf-S+v|H6Q!eR00|Fi(7>o_%bt{{ttWn1coX|0{&pZq1_lgXHSYi($6E=txh zcM^0Zq>&Gy*azeR$W*-s;k@TZjH-5rKmAO;obA zhoydFeLzzE;{TnZavQ!TCqp{Ea%ymKq5#^-Ljc5cHg0Y+t8y*~ida1dh2qg6B&QFj zN9`kN8h7s&swjHUg+CTa6Dny)IAoq?DOPYXbusRv%$rO|JJcilhvF3wz-gL|g_1Zo zDc)!k%m_-4NCW^m6o4%NK5a?L2=gNc|fuMywvP@Y;Zv zj>k>Znd_W)3u*iH`Df1lg?j^u7tyfKnCp__E_qvIrv0Gu-2s>eL5E>=k2uEHZTOKK zK|u)#1uH>@K&^sNH$y}if)JopXs?9eEl^8Ac-z&e4qkEbv|$Fti|l{ca33a(=0VeP z#L&QY+0b(scl`INw2-n*HPnVM>ubG|1x}m1!OA$2OQB&I0t!=yZE7l)p6~ z3YDRuIv{N8`khOaj85C}NmkxtT`W@H=a2LL``oA0Wp`qT8FHgObu(8?HESz`m zs_y`&!2dPCPVpG)HM}|iP=uX+#%+(g+J^@v*o)H>irXtq zK!QX|ZTY*iN=E=Yqq#krqe7`r(fnh?^BVpjX%vtzaNNFhR+3@~Z?pKv+wLVE0~3%? z($FzuGUy0#BRgGx{tqn#=Y+k~>(^)M8mu(Agn^pbZLV0njvDhQ4d;iGN#gegZW;@1 zN=RF6@hBjVA~gy1*e$}gpKz9hfW*-pG9QC|f%|dC_(jU+P*YRir2InH$v{nLqeI>u z`9#Q~WZ_7UY{#M1tZ-V#wp8~|ZroFO%r??z>E3VL1+oxL*)aa0q=e_H8q-22UUF;0 z?vJUdS3nL-A3P~KC%D8cOTE~D7f5p%RT6{?;OQU))L91cn59g9z&`&ASslC(pL{y} zZ*Nr!XQ6Yg9KxHVyudZo2%{CM?UL^OG3MvSH~dMV?87 zPH#O>N#e-H1`ce104bv`0%VN}goZllPpJ`%a`bQDj#r1{1CRQn8vrtv{<}U~d3Rjh z{;B?HY1*~7vwJLYx;x|xs>E4aINl!9Q5`|URJ8;n5he<2oW@r7Zu6(wd4~$HZRBC} z`j3k|Rl8M+S$0E*gNuLb>ias}^t@2sKgRJFz%#%iTN6w6Yp_(_JfS1Rx*S}njD=783dTO7H4KUaf4FpKX{_y@`Lm)(N`U3zOpDZydO zCbjio8Fr}#(aU+``}gl#knUVQCs7K)C{H(@HC^kou7es5cLe(nM!zdLkswHseM6~! z$cTZR>A3x=(z;F^E}MggGi#p-2gN=*Kh{!{hwEBwC$MEnT{IF9B1X2>k}LR_b!K1*I>qnWUJqtTiK0>C}Y{gxN(#P&OU$=j67G_q<1fcZ=$VN@TA zT4!@eom~X12$0IwZVBIgKZMZ|RoA40n+ERL6)Z>_h*xA??;g8MvcCEaG_DMv6ivc8D^GZs_05}Xkh~;QtfW^H;rQ_zuo5{&! zvjHJi7}fjAZU?QB7HpsSpefvPZTkGkH#~oXqD$X$+}0UuvdZ`scTMX&&KI9FjlSE%1fK@z-Lk z*tDw1u1NG{bkr=O&3_VUbQp!`o#l*Ob?< zEr15DKHZ<(ZXxz35q{@>-tSO>0iAIx$ZbMk1TZ}yv}(0x(3(KuEcfHcn?&pm_p{J$`x&QUC_LIB;gcp#I1>Tu3H~j>SNz-uO0XWfY#f-@s3R%*JS; zUWE+P{q@O%!?C8by;J##mK{IFrG|ttv$Y0w3Ly)1F=}0(sYUl+c`0W9@qdmbeZ8G$ z83*-v@Y;Kv5+}5v*MK7UeOZ|RpQ8RM?FcTmBY}UBTAZG(qL)n09wON9I!?6*RI0@- zZB6^C=!=${fENk&=<4h9_-4z5iZf5v=QyXoy;v5^CVq(8!)Ocsm~Tl5TTyHfbog3J zzEf&H^x-@3-2oNl<-3=VHpSX-HsGW)K>Xx%GvK^nurfp@E0=^gPahC4QOS4hjwJ^b zz}NtL^Q&R=xhw8$G_&ME%>Y-~gB2sh5#>B73@B{5_~A!JOjR zNz8BB--eE$HjNh;MmfudFOR!p72*C4r+#}6k9Q`R7%6n5^)IDIEp^TG+7tSpZ39eE zbp&Ba0maa!_aRqL=RBDdm^*G9!n6qg89QSX_?3(_*RZJOYlpUHF7M_3O<29)2RCXb zFr>*st{xEG2x5|y@uFb{&;v9>fD%mQ%DhV4IB_h^xV!kL(txwwFroKP2aNbg>N771 ziQCt`EHHp0UGs>~Gl3%zumJBsdSZxHd}&5orZ%Rg`Fr4OZD7<7Lzd|^`s?v9&3~=Q z?g?PAb$Af+Xa0cN`SKSgNZ?>ad4FZ82g>Vv6S2MRz1RaYqi=9-zyL5B$Z>leRH(lM z9+Tuf3J6zwI-2Q*$@BuPc8s`3d+fn+J}` zS7kigyB@q!%z6~3i(9#Vv6o@Xn9%860$yCmGX8zbuhgJMq1f~8hid3q8yJcu2Y6M@ z+I9MRdr$T&;IV~iqrWN0%fAxFYeu_TLV=*W0O=LbhbB}Hl5ROzFNptu5jjpqH11ko zXMa8BR0(He*~&YHMc7>GWEscOy`YEA8x7INJYl$pip+mwZ3x*1w@W(x zaSTe-l&1ZP5(%Uc`S(c z5|`NG^kD z65Yex$_JMQX$1QbSw%tH@~f7y37#dP9O~FU8!MQ;>Y;9BH6IQz=zoX(?9p!+OITK0 zo5z67+4J@TnW&Uh$#Mh5sCHl4EtVPW$Qmd!#!Nh}AlE&i$ydqNUtiX=uZSkaz!~rm zj%hYkxjz+D8+Vj5yekNb+Mm3v>X`AX@ihc;2;diB=MtR~xK)&u(QglKUW4-=xEIW3 z-j5ZAd+Uwr=VYujA3B;VSpuW51L&m51FuedBTp^EpI8*g`<}#rdw=E1R6Qinioh1w zLu~)gkltQ=pc9$>+6$xj8pgONRV*Jq6rmITS;`zjqqcbAv)3EtH3@s_m;?oLzZkHH zAyR5jZXs(Bh@}ub(`w;?LBT>IFwne|mrnFv$?d5;f#L732iw4D!Dt+VK6qbUO>I^( z=6N75u^;znTGLnAy3#SotGSwuE8<btY!$*=hb|G+Kjv_&-nO*ZG5qIwb=LwOrpPQ{H`9vD?ZxofDrJ9z$Kre ztz=T0cgy3CE^#xqhp03(Vw@YW&DnpC)bB81pMxH+XYKxKF0gt-x45PM%4O%}g^KVr z?h0tqzE{EY>HqVi2~&EcnXp=o&m*AbleeT~;9T^y)~zgB;JwM;a_XP^@4qna&s|%& z=gRlR`DHh-7wwUr3%E9Ktbg2EWCROR&p!a8En-I;xP+mn#SUt&arNJMR|h$3lnY`J zAfy7_3<*BeVARxA+1RfV15qVkn1w z)w^%XixrU>nbBrjkpmvA2~sHx$#pk1$2=*{KP`8Xk=dH2n?7T8^cK|L{6zmf0_HS4 z!~fq3OM_X-=W81HgG%>#ZG*kUi&>X1+`ASj=Se`z#aB{p-hJ60a@K4YjI^!c#ed4y ze>o~4>%{{*opi>w=m%ZRy$W}X*-r)b<_=2<$|wdpB9;fcOwXnvWleC_d=6v4Ua=+u zx|6*>BX6JFXS@m&V@EB3{*QtvaVF`>^+2{{=|g?pp1%T3{x;|{O zF!9UghOioQs6{rV!rCnKR2K5Yt~q@GeB~3iIcpA{DDsF(TTutoKs2tHSWbW;R!#F~ z{+|}SK=3bx92hE1McuFenaHy=NR>iSf5>#e`?V`GGZP%1S%02ozklDX0~ySJ(h97* z3~St(Uq)5jK*hwy@=Pk+mtgLJl^~2rmGDGMl1Y_o67#&b*lLy#9No*&an+p08IKJ- zK2rXFyIBI>>#7|}zF`hlVo-ia}5H)eo}4R19fubS867VS$~vzLaQc+i``5(tK_|4}okDbK zHxB47=)x=_%9dFpeQC23eIYVIc@qvB36M)V{*Q1xMF__fWQferM?ZyL-l!r^%Ud

kIj(P1~WfHB(&<V4)a0>X*t}n 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 Date: Thu, 8 Oct 2015 23:53:57 +0200 Subject: [PATCH 20/51] Smaller image --- dev/cliparts/commons.svg | 15 ++++++++++++--- htdocs/public/theme/common/nophoto.png | Bin 75936 -> 10127 bytes 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/dev/cliparts/commons.svg b/dev/cliparts/commons.svg index 4b8820d06f5..1abca065694 100644 --- a/dev/cliparts/commons.svg +++ b/dev/cliparts/commons.svg @@ -1773,7 +1773,10 @@ + transform="matrix(0.99771798,0,0,1.0176646,-1.1510876,-0.81544515)" + inkscape:export-filename="/home/ldestailleur/git/dolibarr/htdocs/public/theme/common/nophoto.png" + inkscape:export-xdpi="76.774879" + inkscape:export-ydpi="76.774879"> + sodipodi:type="arc" + inkscape:export-filename="/home/ldestailleur/git/dolibarr/htdocs/public/theme/common/nophoto.png" + inkscape:export-xdpi="76.774879" + inkscape:export-ydpi="76.774879" /> + style="fill:none;stroke:#dbdbdb;stroke-width:5.06745768;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + inkscape:export-filename="/home/ldestailleur/git/dolibarr/htdocs/public/theme/common/nophoto.png" + inkscape:export-xdpi="76.774879" + inkscape:export-ydpi="76.774879" /> diff --git a/htdocs/public/theme/common/nophoto.png b/htdocs/public/theme/common/nophoto.png index c3989b59135510003b18afc6081242646afdbc74..bce088ef784902b7f05b0a8fdcc9c141ab5a2341 100644 GIT binary patch literal 10127 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 literal 75936 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

kIj(P1~WfHB(&<V4)a0>X*t}n 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 Date: Fri, 9 Oct 2015 00:30:02 +0200 Subject: [PATCH 21/51] When there is no contact, no need to show filters --- htdocs/core/lib/company.lib.php | 67 ++++++++++++++++----------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 9a67065fe64..ce5345854f0 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -632,40 +632,6 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='') print "\n"; - print ''; - // Name - Position - print ''; - print ''; - print ''; - - // Address / Phone - print ''; - //print ''; - print ''; - - // Email - print ' '; - - // Status - print ''; - print $form->selectarray('search_status', array('-1'=>'','0'=>$contactstatic->LibStatut(0,1),'1'=>$contactstatic->LibStatut(1,1)),$search_status); - print ''; - - // Add to agenda - if (! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->create) - { - $colspan++; - print ' '; - } - - // Edit - print ''; - print ''; - print ''; - - print ""; - - $sql = "SELECT p.rowid, p.lastname, p.firstname, p.fk_pays as country_id, p.civility, p.poste, p.phone as phone_pro, p.phone_mobile, p.phone_perso, p.fax, p.email, p.skype, p.statut "; $sql .= ", p.civility as civility_id, p.address, p.zip, p.town"; $sql .= " FROM ".MAIN_DB_PREFIX."socpeople as p"; @@ -683,6 +649,39 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='') $var=true; if ($num) { + print ''; + // Name - Position + print ''; + print ''; + print ''; + + // Address / Phone + print ''; + //print ''; + print ''; + + // Email + print ' '; + + // Status + print ''; + print $form->selectarray('search_status', array('-1'=>'','0'=>$contactstatic->LibStatut(0,1),'1'=>$contactstatic->LibStatut(1,1)),$search_status); + print ''; + + // Add to agenda + if (! empty($conf->agenda->enabled) && $user->rights->agenda->myactions->create) + { + $colspan++; + print ' '; + } + + // Edit + print ''; + print ''; + print ''; + + print ""; + $i=0; while ($i < $num) From 61d739635e862b462d16ed450bd614b2264692af Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 9 Oct 2015 12:30:16 +0200 Subject: [PATCH 22/51] Uniformize code and css for tables. Filters must be implemented following example in test_arrays.php. --- htdocs/adherents/list.php | 5 +- htdocs/adherents/type.php | 4 +- htdocs/comm/askpricesupplier/list.php | 26 +++--- htdocs/comm/list.php | 7 +- htdocs/comm/propal/list.php | 8 +- htdocs/comm/prospect/list.php | 7 +- htdocs/commande/list.php | 2 +- htdocs/compta/facture/list.php | 11 ++- htdocs/compta/facture/mergepdftool.php | 20 +++-- htdocs/compta/paiement/cheque/list.php | 86 +++++++++++-------- .../compta/paiement/class/paiement.class.php | 2 +- htdocs/compta/paiement/list.php | 3 +- htdocs/contact/list.php | 7 +- htdocs/contrat/list.php | 17 ++-- htdocs/fourn/list.php | 7 +- htdocs/product/list.php | 16 ++-- htdocs/product/reassort.php | 30 ++++--- htdocs/product/reassortlot.php | 25 +++--- htdocs/projet/list.php | 9 +- htdocs/projet/tasks/index.php | 2 +- htdocs/public/test/test_arrays.php | 18 ++-- htdocs/societe/list.php | 9 +- htdocs/theme/eldy/style.css.php | 72 ++++++---------- 23 files changed, 215 insertions(+), 178 deletions(-) diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php index 2f495e60bf7..d89360631db 100644 --- a/htdocs/adherents/list.php +++ b/htdocs/adherents/list.php @@ -195,9 +195,10 @@ if ($resql) if (! empty($conf->categorie->enabled)) { require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; + $moreforfilter.='

'; $moreforfilter.=$langs->trans('Categories'). ': '; $moreforfilter.=$formother->select_categories(Categorie::TYPE_MEMBER,$search_categ,'search_categ',1); - $moreforfilter.='       '; + $moreforfilter.='
'; } if (! empty($moreforfilter)) { @@ -209,7 +210,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/adherents/type.php b/htdocs/adherents/type.php index 75102ed9f50..b2fe0ac404b 100644 --- a/htdocs/adherents/type.php +++ b/htdocs/adherents/type.php @@ -168,7 +168,7 @@ if (! $rowid && $action != 'create' && $action != 'edit') print load_fiche_titre($langs->trans("MembersTypes")); - dol_fiche_head(''); + //dol_fiche_head(''); $sql = "SELECT d.rowid, d.libelle, d.cotisation, d.vote"; $sql.= " FROM ".MAIN_DB_PREFIX."adherent_type as d"; @@ -211,7 +211,7 @@ if (! $rowid && $action != 'create' && $action != 'edit') dol_print_error($db); } - dol_fiche_end(); + //dol_fiche_end(); /* * Hotbar diff --git a/htdocs/comm/askpricesupplier/list.php b/htdocs/comm/askpricesupplier/list.php index 2e78045b308..ae7ed58b29c 100644 --- a/htdocs/comm/askpricesupplier/list.php +++ b/htdocs/comm/askpricesupplier/list.php @@ -242,7 +242,6 @@ if ($result) print ''; $i = 0; - print '
'; $moreforfilter=''; @@ -250,25 +249,32 @@ if ($result) if ($user->rights->societe->client->voir || $socid) { $langs->load("commercial"); + $moreforfilter.='
'; $moreforfilter.=$langs->trans('ThirdPartiesOfSaleRepresentative'). ': '; $moreforfilter.=$formother->select_salesrepresentatives($search_sale,'search_sale',$user); - $moreforfilter.='       '; + $moreforfilter.='
'; } // If the user can view prospects other than his' if ($user->rights->societe->client->voir || $socid) { + $moreforfilter.='
'; $moreforfilter.=$langs->trans('LinkedToSpecificUsers'). ': '; $moreforfilter.=$form->select_dolusers($search_user,'search_user',1); + $moreforfilter.='
'; } - if (! empty($moreforfilter)) - { - print ''; - print ''; - } + if (! empty($moreforfilter)) + { + print '
'; + print $moreforfilter; + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + print '
'; + } + - print ''; + print '
'; - print $moreforfilter; - print '
'; + print ''; print_liste_field_titre($langs->trans('Ref'),$_SERVER["PHP_SELF"],'p.ref','',$param,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans('Company'),$_SERVER["PHP_SELF"],'s.nom','',$param,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans('AskPriceSupplierDate'),$_SERVER["PHP_SELF"],'p.date_livraison','',$param, 'align="center"',$sortfield,$sortorder); diff --git a/htdocs/comm/list.php b/htdocs/comm/list.php index fcc1783daf5..1cc0f2fa968 100644 --- a/htdocs/comm/list.php +++ b/htdocs/comm/list.php @@ -193,15 +193,18 @@ if ($result) $moreforfilter=''; if (! empty($conf->categorie->enabled)) { + $moreforfilter.='
'; $moreforfilter.=$langs->trans('Categories'). ': '; $moreforfilter.=$formother->select_categories(2,$search_categ,'search_categ',1); - $moreforfilter.='       '; + $moreforfilter.='
'; } // If the user can view prospects other than his' if ($user->rights->societe->client->voir || $socid) { + $moreforfilter.='
'; $moreforfilter.=$langs->trans('SalesRepresentatives'). ': '; $moreforfilter.=$formother->select_salesrepresentatives($search_sale,'search_sale',$user); + $moreforfilter.='
'; } if ($moreforfilter) { @@ -213,7 +216,7 @@ if ($result) print ''; } - print '
'."\n"; + print '
'; print ''; print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder); diff --git a/htdocs/comm/propal/list.php b/htdocs/comm/propal/list.php index f595ad8aec0..7d1539ff0f5 100644 --- a/htdocs/comm/propal/list.php +++ b/htdocs/comm/propal/list.php @@ -265,7 +265,6 @@ if ($result) if ($optioncss != '') print ''; $i = 0; - print '
'; $moreforfilter=''; @@ -298,12 +297,13 @@ if ($result) } if (! empty($moreforfilter)) { - print ''; - print ''; + print ''; } + print '
'; + print '
'; print $moreforfilter; - print '
'; + print ''; print_liste_field_titre($langs->trans('Ref'),$_SERVER["PHP_SELF"],'p.ref','',$param,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans('RefCustomer'),$_SERVER["PHP_SELF"],'p.ref_client','',$param,'',$sortfield,$sortorder); diff --git a/htdocs/comm/prospect/list.php b/htdocs/comm/prospect/list.php index 670d170de97..2282b39420e 100644 --- a/htdocs/comm/prospect/list.php +++ b/htdocs/comm/prospect/list.php @@ -359,15 +359,18 @@ if ($resql) if (! empty($conf->categorie->enabled)) { require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; + $moreforfilter.='
'; $moreforfilter.=$langs->trans('Categories'). ': '; $moreforfilter.=$formother->select_categories(Categorie::TYPE_CUSTOMER,$search_categ,'search_categ',1); - $moreforfilter.='       '; + $moreforfilter.='
'; } // If the user can view prospects other than his' if ($user->rights->societe->client->voir || $socid) { + $moreforfilter.='
'; $moreforfilter.=$langs->trans('SalesRepresentatives'). ': '; $moreforfilter.=$formother->select_salesrepresentatives($search_sale,'search_sale',$user); + $moreforfilter.='
'; } if ($moreforfilter) { @@ -379,7 +382,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 c4ea9cbf838..200f9e66362 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -301,7 +301,7 @@ if ($resql) print ''; } - 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/facture/list.php b/htdocs/compta/facture/list.php index b507f5284dd..e4993eacb88 100644 --- a/htdocs/compta/facture/list.php +++ b/htdocs/compta/facture/list.php @@ -275,7 +275,6 @@ if ($resql) $i = 0; print ''."\n"; - print '
'; // If the user can view prospects other than his' $moreforfilter=''; @@ -308,12 +307,16 @@ if ($resql) if ($moreforfilter) { - print ''; - print ''; + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + print ''; } + print '
'; + print '
'; print $moreforfilter; - print '
'; + print ''; print_liste_field_titre($langs->trans('Ref'),$_SERVER['PHP_SELF'],'f.facnumber','',$param,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans('RefCustomer'),$_SERVER["PHP_SELF"],'f.ref_client','',$param,'',$sortfield,$sortorder); diff --git a/htdocs/compta/facture/mergepdftool.php b/htdocs/compta/facture/mergepdftool.php index 72276b77069..b78b31d1a02 100644 --- a/htdocs/compta/facture/mergepdftool.php +++ b/htdocs/compta/facture/mergepdftool.php @@ -616,32 +616,38 @@ if ($resql) } $i = 0; - print '
'; // If the user can view prospects other than his' $moreforfilter=''; if ($user->rights->societe->client->voir || $socid) { $langs->load("commercial"); + $moreforfilter.='
'; $moreforfilter.=$langs->trans('ThirdPartiesOfSaleRepresentative'). ': '; $moreforfilter.=$formother->select_salesrepresentatives($search_sale,'search_sale',$user); - $moreforfilter.='       '; + $moreforfilter.='
'; } // If the user can view prospects other than his' if ($user->rights->societe->client->voir || $socid) { + $moreforfilter.='
'; $moreforfilter.=$langs->trans('LinkedToSpecificUsers'). ': '; $moreforfilter.=$form->select_dolusers($search_user,'search_user',1); + $moreforfilter.='
'; } - if ($moreforfilter) + if (! empty($moreforfilter)) { - print ''; - print ''; + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + print ''; } - print ''; + print '
'; + print '
'; print $moreforfilter; - print '
'; + + print ''; print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"f.facnumber","",$param,"",$sortfield,$sortorder); print_liste_field_titre($langs->trans('RefCustomer'),$_SERVER["PHP_SELF"],'f.ref_client','',$param,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Date"),$_SERVER["PHP_SELF"],"f.datef","",$param,'align="center"',$sortfield,$sortorder); diff --git a/htdocs/compta/paiement/cheque/list.php b/htdocs/compta/paiement/cheque/list.php index d44aef51dce..c322863efc1 100644 --- a/htdocs/compta/paiement/cheque/list.php +++ b/htdocs/compta/paiement/cheque/list.php @@ -117,7 +117,7 @@ if ($resql) print_barre_liste($langs->trans("MenuChequeDeposits"), $page, $_SERVER["PHP_SELF"], $params, $sortfield, $sortorder, '', $num); print ''; - print '
'; + print '
'; print ''; print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"bc.number","",$params,"",$sortfield,$sortorder); print_liste_field_titre($langs->trans("DateCreation"),$_SERVER["PHP_SELF"],"dp","",$params,'align="center"',$sortfield,$sortorder); @@ -148,42 +148,52 @@ if ($resql) print ''; print "\n"; - $var=true; - while ($i < min($num,$limit)) - { - $objp = $db->fetch_object($resql); - $var=!$var; - print ""; - - // Num ref cheque - print ''; - - // Date - print ''; // TODO Use date hour - - // Bank - print ''; - - // Number of cheques - print ''; - - // Amount - print ''; - - // Statut - print '\n"; - $i++; - } + if ($num > 0) + { + $var=true; + while ($i < min($num,$limit)) + { + $objp = $db->fetch_object($resql); + $var=!$var; + print ""; + + // Num ref cheque + print ''; + + // Date + print ''; // TODO Use date hour + + // Bank + print ''; + + // Number of cheques + print ''; + + // Amount + print ''; + + // Statut + print '\n"; + $i++; + } + } + else + { + $var=!$var; + print ""; + print '"; + print ''; + } print "
'; - $checkdepositstatic->id=$objp->rowid; - $checkdepositstatic->ref=($objp->ref?$objp->ref:$objp->rowid); - $checkdepositstatic->statut=$objp->statut; - print $checkdepositstatic->getNomUrl(1); - print ''.dol_print_date($db->jdate($objp->dp),'day').''; - if ($objp->bid) print ''.img_object($langs->trans("ShowAccount"),'account').' '.$objp->label.''; - else print ' '; - print ''.$objp->nbcheque.''.price($objp->amount).''; - print $checkdepositstatic->LibStatut($objp->statut,5); - print "
'; + $checkdepositstatic->id=$objp->rowid; + $checkdepositstatic->ref=($objp->ref?$objp->ref:$objp->rowid); + $checkdepositstatic->statut=$objp->statut; + print $checkdepositstatic->getNomUrl(1); + print ''.dol_print_date($db->jdate($objp->dp),'day').''; + if ($objp->bid) print ''.img_object($langs->trans("ShowAccount"),'account').' '.$objp->label.''; + else print ' '; + print ''.$objp->nbcheque.''.price($objp->amount).''; + print $checkdepositstatic->LibStatut($objp->statut,5); + print "
'.$langs->trans("None")."
"; print "\n"; } @@ -192,6 +202,6 @@ else dol_print_error($db); } -$db->close(); llxFooter(); +$db->close(); diff --git a/htdocs/compta/paiement/class/paiement.class.php b/htdocs/compta/paiement/class/paiement.class.php index 45c9d0b526b..35d0f838ff9 100644 --- a/htdocs/compta/paiement/class/paiement.class.php +++ b/htdocs/compta/paiement/class/paiement.class.php @@ -906,7 +906,7 @@ class Paiement extends CommonObject if ($withpicto) $result.=($link.img_object($langs->trans("ShowPayment"), 'payment', 'class="classfortooltip"').$linkend); if ($withpicto && $withpicto != 2) $result.=' '; - if ($withpicto != 2) $result.=$link.$this->ref.$linkend; + if ($withpicto != 2) $result.=$link.($this->ref?$this->ref:$this->id).$linkend; return $result; } diff --git a/htdocs/compta/paiement/list.php b/htdocs/compta/paiement/list.php index 8231f607ef7..6e3d31364ce 100644 --- a/htdocs/compta/paiement/list.php +++ b/htdocs/compta/paiement/list.php @@ -305,6 +305,5 @@ else dol_print_error($db); } -$db->close(); - llxFooter(); +$db->close(); diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php index 649179c1082..4082ebbae80 100644 --- a/htdocs/contact/list.php +++ b/htdocs/contact/list.php @@ -288,9 +288,10 @@ if ($result) if (! empty($conf->categorie->enabled)) { require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; - $moreforfilter.=$langs->trans('Categories'). ': '; + $moreforfilter.='
'; + $moreforfilter.=$langs->trans('Categories'). ': '; $moreforfilter.=$formother->select_categories(Categorie::TYPE_CONTACT,$search_categ,'search_categ',1); - $moreforfilter.='       '; + $moreforfilter.='
'; } if ($moreforfilter) { @@ -299,7 +300,7 @@ if ($result) print '
'; } - print ''; + print '
'; // Ligne des titres print ''; diff --git a/htdocs/contrat/list.php b/htdocs/contrat/list.php index 97d20e2acb1..a4f719cf7f5 100644 --- a/htdocs/contrat/list.php +++ b/htdocs/contrat/list.php @@ -136,26 +136,29 @@ if ($resql) print ''; if ($optioncss != '') print ''; - print '
'; // If the user can view prospects other than his' $moreforfilter=''; if ($user->rights->societe->client->voir || $socid) { $langs->load("commercial"); + $moreforfilter.='
'; $moreforfilter.=$langs->trans('ThirdPartiesOfSaleRepresentative'). ': '; $moreforfilter.=$formother->select_salesrepresentatives($search_sale,'search_sale',$user); - $moreforfilter.='       '; + $moreforfilter.='
'; } - if ($moreforfilter) + if (! empty($moreforfilter)) { - print ''; - print ''; + print '
'; + print $moreforfilter; + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + print '
'; } + print '
'; - print $moreforfilter; - print '
'; print ''; $param='&search_contract='.$search_contract; diff --git a/htdocs/fourn/list.php b/htdocs/fourn/list.php index 5693031c630..8fb33850919 100644 --- a/htdocs/fourn/list.php +++ b/htdocs/fourn/list.php @@ -195,9 +195,10 @@ if ($resql) if (! empty($conf->categorie->enabled)) { require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; + $moreforfilter.='
'; $moreforfilter.=$langs->trans('Categories'). ': '; $moreforfilter.=$htmlother->select_categories(Categorie::TYPE_SUPPLIER,$search_categ,'search_categ',1); - $moreforfilter.='       '; + $moreforfilter.='
'; } if ($moreforfilter) { @@ -209,8 +210,8 @@ if ($resql) print ''; } - print '
'; - + print '
'; + print ''; print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$param,'valign="middle"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Zip"),$_SERVER["PHP_SELF"],"s.zip","",$param,'valign="middle"',$sortfield,$sortorder); diff --git a/htdocs/product/list.php b/htdocs/product/list.php index 68e6143c48c..d973a3d41ef 100644 --- a/htdocs/product/list.php +++ b/htdocs/product/list.php @@ -281,8 +281,6 @@ else print ''; print ''; - print '
'; - // Filter on categories $moreforfilter=''; $colspan=6; @@ -294,19 +292,23 @@ else if (! empty($conf->categorie->enabled)) { - $moreforfilter.=$langs->trans('Categories'). ': '; + $moreforfilter.='
'; + $moreforfilter.=$langs->trans('Categories'). ': '; $moreforfilter.=$htmlother->select_categories(Categorie::TYPE_PRODUCT,$search_categ,'search_categ',1); - $moreforfilter.='       '; + $moreforfilter.='
'; } if ($moreforfilter) { - print ''; - print ''; + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + print ''; } // Lignes des titres + print '
'; + print '
'; print $moreforfilter; - print '
'; print ''; print_liste_field_titre($langs->trans("Ref"), $_SERVER["PHP_SELF"], "p.ref",$param,"","",$sortfield,$sortorder); print_liste_field_titre($langs->trans("Label"), $_SERVER["PHP_SELF"], "p.label",$param,"","",$sortfield,$sortorder); diff --git a/htdocs/product/reassort.php b/htdocs/product/reassort.php index 8bd2096af69..cee05f69340 100644 --- a/htdocs/product/reassort.php +++ b/htdocs/product/reassort.php @@ -215,27 +215,35 @@ if ($resql) print ''; print ''; - print '
'; - // Filter on categories $moreforfilter=''; if (! empty($conf->categorie->enabled)) { + $moreforfilter.='
'; $moreforfilter.=$langs->trans('Categories'). ': '; $moreforfilter.=$htmlother->select_categories(Categorie::TYPE_PRODUCT,$search_categ,'search_categ'); - $moreforfilter.='           '; + $moreforfilter.='
'; } + + $moreforfilter.='
'; $moreforfilter.=$langs->trans("StockTooLow").' '; - if ($moreforfilter) - { - print '
'; - print ''; - } + $moreforfilter.=''; + + if (! empty($moreforfilter)) + { + print '
'; + print $moreforfilter; + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + print '
'; + } + $param="&tosell=$tosell&tobuy=$tobuy".(isset($type)?"&type=$type":"")."&fourn_id=$fourn_id&snom=$snom&sref=$sref"; - + + print '
'; - print $moreforfilter; - print '
'; + // Lignes des titres print ""; print_liste_field_titre($langs->trans("Ref"), $_SERVER["PHP_SELF"], "p.ref",$param,"","",$sortfield,$sortorder); diff --git a/htdocs/product/reassortlot.php b/htdocs/product/reassortlot.php index 86410df8a00..d7f5905fbd3 100644 --- a/htdocs/product/reassortlot.php +++ b/htdocs/product/reassortlot.php @@ -227,27 +227,32 @@ if ($resql) print ''; print ''; - print '
'; - // Filter on categories $moreforfilter=''; if (! empty($conf->categorie->enabled)) { + $moreforfilter.='
'; $moreforfilter.=$langs->trans('Categories'). ': '; $moreforfilter.=$htmlother->select_categories(Categorie::TYPE_PRODUCT,$search_categ,'search_categ'); - $moreforfilter.='           '; + $moreforfilter.='
'; } //$moreforfilter.=$langs->trans("StockTooLow").' '; - if ($moreforfilter) - { - print ''; - print ''; - } + + if (! empty($moreforfilter)) + { + print '
'; + print $moreforfilter; + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + print '
'; + } + $param="&tosell=$tosell&tobuy=$tobuy".(isset($type)?"&type=$type":"")."&fourn_id=$fourn_id&snom=$snom&sref=$sref&batch=$batch&eatby=$eatby&sellby=$sellby"; + print '
'; - print $moreforfilter; - print '
'; + // Lignes des titres print ""; print_liste_field_titre($langs->trans("Ref"), $_SERVER["PHP_SELF"], "p.ref",$param,"","",$sortfield,$sortorder); diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php index 8e98bf9e93f..16fac9bb1bd 100644 --- a/htdocs/projet/list.php +++ b/htdocs/projet/list.php @@ -274,15 +274,18 @@ if ($resql) if (! empty($moreforfilter)) { print '
'; + //print '
'; + //print ''; + } - print '
'; print $moreforfilter; $parameters=array(); $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print ''; - } + //print '
'; - + print '
'; + print ''; print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"p.ref","",$param,"",$sortfield,$sortorder); print_liste_field_titre($langs->trans("Label"),$_SERVER["PHP_SELF"],"p.title","",$param,"",$sortfield,$sortorder); diff --git a/htdocs/projet/tasks/index.php b/htdocs/projet/tasks/index.php index 082fbdd8d7b..39484f05014 100644 --- a/htdocs/projet/tasks/index.php +++ b/htdocs/projet/tasks/index.php @@ -141,7 +141,7 @@ if (! empty($moreforfilter)) print ''; } -print '
'; +print '
'; print ''; print ''; print ''; diff --git a/htdocs/public/test/test_arrays.php b/htdocs/public/test/test_arrays.php index d31b10ff5ef..2801ebb8855 100644 --- a/htdocs/public/test/test_arrays.php +++ b/htdocs/public/test/test_arrays.php @@ -146,9 +146,7 @@ $nav.=''; print_barre_liste('Title of my list', 3, $_SERVER["PHP_SELF"], '', '', '', 'Text in middle', 20, 5000, '', 0, $nav); -?> -
'.$langs->trans("Project").''.$langs->trans("ProjectStatus").'
-'; $moreforfilter.=$langs->trans('This is a select list for a filter A'). ': '; $cate_arbo = array('field1'=>'value1a into the select list A','field2'=>'value2a'); @@ -175,11 +173,15 @@ $moreforfilter.=''; if (! empty($moreforfilter)) { - print ''; - print ''; + $parameters=array(); + $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters); // Note that $action and $object may have been modified by hook + print $hookmanager->resPrint; + print ''; } + +print '
'; + print '
'; print $moreforfilter; - print '
'; ?> trans('title1'),0,$_SERVER["PHP_SELF"],'aaa','','','align="left"',$sortfield,$sortorder); ?> @@ -188,7 +190,9 @@ if (! empty($moreforfilter)) -
getNomUrl(1); ?>b1c1
a2b2c2
+'; +?>
diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index a5792642a64..5e73552e231 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -321,15 +321,18 @@ if ($resql) $moreforfilter=''; if (! empty($conf->categorie->enabled)) { + $moreforfilter.='
'; $moreforfilter.=$langs->trans('Categories'). ': '; $moreforfilter.=$htmlother->select_categories(Categories::TYPE_CUSTOMER,$search_categ,'search_categ'); - $moreforfilter.='       '; + $moreforfilter.='
'; } // If the user can view prospects other than his' if ($user->rights->societe->client->voir || $socid) { + $moreforfilter.='
'; $moreforfilter.=$langs->trans('SalesRepresentatives'). ': '; $moreforfilter.=$htmlother->select_salesrepresentatives($search_sale,'search_sale',$user); + $moreforfilter.='
'; } if ($moreforfilter) { @@ -349,8 +352,8 @@ if ($resql) print ''; } - print ''; - + print '
'; + // Lines of titles print ''; print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder); diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index b6987ed42cc..9f5376947da 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -452,8 +452,10 @@ textarea.centpercent { div.divsearchfield { float: ; margin-: 12px; - margin-top: 1px; - margin-bottom: 2px; + margin-: 2px; + margin-top: 3px; + margin-bottom: 3px; + padding-left: 2px; } div.confirmmessage { padding-top: 6px; @@ -1934,7 +1936,7 @@ td.border, div.tagtable div div.border { /* Main boxes */ -table.noborder, table.formdoc, div.noborder { +table.liste, table.noborder, table.formdoc, div.noborder { width: 100%; border-collapse: separate !important; @@ -1962,25 +1964,28 @@ table.noborder, table.formdoc, div.noborder { -webkit-box-shadow: 2px 2px 4px #CCC; box-shadow: 2px 2px 4px #CCC; - -moz-border-radius: 0.2em; +/* -moz-border-radius: 0.2em; -webkit-border-radius: 0.2em; - border-radius: 0.2em; + border-radius: 0.2em;*/ } -table.noborder tr, div.noborder form { +table.liste tr, table.noborder tr, div.noborder form { border-top-color: #FEFEFE; border-right-width: 1px; - border-right-color: #BBBBBB; + border-right-color: #BBB; border-right-style: solid; border-left-width: 1px; - border-left-color: #BBBBBB; + border-left-color: #BBB; border-left-style: solid; min-height: 20px; } -table.noborder th, table.noborder td, div.noborder form, div.noborder form div { +table.liste th, table.noborder th { + padding: 10px 2px 10px 3px; /* t r b l */ +} +table.liste td, table.noborder td, div.noborder form, div.noborder form div { padding: 5px 2px 5px 3px; /* t r b l */ } @@ -2008,42 +2013,12 @@ td.borderright { } -/* For lists */ - -table.liste { - width: 100%; - - border-collapse: collapse; -/* border-top-color: #FEFEFE; - border-top-width: 1px; - border-top-color: #CCC; - border-top-style: solid; -*/ - - border-right-width: 1px; - border-right-color: #CCC; - border-right-style: solid; - -/* - border-bottom-width: 1px; - border-bottom-color: #BBBBBB; - border-bottom-style: solid; -*/ - border-left-width: 1px; - border-left-color: #CCC; - border-left-style: solid; - - margin-bottom: 2px; - margin-top: 0px; - - -moz-box-shadow: 0px 3px 4px #CCC; - -webkit-box-shadow: 0px 3px 4px #CC; - box-shadow: 0px 3px 4px #CCC; -} -table.liste td { - padding-right: 2px; +/* For table with no filter before */ +table.listwithfilterbefore { + border-top: none !important; } + .tagtable, .table-border { display: table; } .tagtr, .table-border-row { display: table-row; } .tagtd, .table-border-col, .table-key-border-col, .table-val-border-col { display: table-cell; } @@ -2285,27 +2260,28 @@ div.liste_titre { div.liste_titre { min-height: 26px !important; /* We cant use height because it's a div and it should be higher if content is more. but min-height does not work either for div */ - padding-left: 3px; padding-top: 2px; padding-bottom: 2px; border-right-width: 1px; - border-right-color: #CCC; + border-right-color: #BBB; border-right-style: solid; border-left-width: 1px; - border-left-color: #CCC; + border-left-color: #BBB; border-left-style: solid; border-top-width: 1px; - border-top-color: #CCC; + border-top-color: #BBB; border-top-style: solid; } div.liste_titre_bydiv { box-shadow: none; border-collapse: collapse; display: table; - padding: 2px 2px 2px 0; + padding: 2px 0px 2px 0; + box-shadow: 2px 2px 4px #CCC; + width: calc(100% - 1px); /* 1px more, i don't know why */ } tr.liste_titre, tr.liste_titre_sel, form.liste_titre, form.liste_titre_sel, table.dataTable.tr { From 82428fea689b7ad20d0700447b0ebdd15fbe6d21 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 9 Oct 2015 13:01:50 +0200 Subject: [PATCH 23/51] NEW: Only arrow of current sorted field is visible into table views. This save a lot of spaces. You can click on the column title to sort. This make clickable area larger and click to sort is easier. --- htdocs/core/lib/functions.lib.php | 43 +++++++++++++++++++++---------- htdocs/societe/list.php | 7 ----- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 81f14683383..faa7c5ee6c2 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -2669,7 +2669,8 @@ function getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $m $sortorder=strtoupper($sortorder); $out=''; - + $sortimg=''; + $tag='th'; if ($thead==2) $tag='div'; @@ -2678,25 +2679,33 @@ function getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $m if ($field && ($sortfield == $field || $sortfield == preg_replace("/^[^\.]+\./","",$field))) $out.= '<'.$tag.' class="'.$prefix.'liste_titre_sel" '. $moreattrib.'>'; else $out.= '<'.$tag.' class="'.$prefix.'liste_titre" '. $moreattrib.'>'; - if (! empty($conf->dol_optimize_smallscreen) && empty($thead) && $field) // If this is a sort field + if (empty($thead) && $field) // If this is a sort field { $options=preg_replace('/sortfield=([a-zA-Z0-9,\s\.]+)/i','',$moreparam); $options=preg_replace('/sortorder=([a-zA-Z0-9,\s\.]+)/i','',$options); $options=preg_replace('/&+/i','&',$options); if (! preg_match('/^&/',$options)) $options='&'.$options; - if ($sortorder == 'DESC' ) $out.= ''; - if ($sortorder == 'ASC' ) $out.= ''; + if ($field != $sortfield) + { + if ($sortorder == 'DESC') $out.= ''; + if ($sortorder == 'ASC' || ! $sortorder) $out.= ''; + } + else + { + if ($sortorder == 'DESC' || ! $sortorder) $out.= ''; + if ($sortorder == 'ASC') $out.= ''; + } } $out.=$name; - if (! empty($conf->dol_optimize_smallscreen) && empty($thead) && $field) // If this is a sort field + if (empty($thead) && $field) // If this is a sort field { $out.=''; } - if (empty($conf->dol_optimize_smallscreen) && empty($thead) && $field) // If this is a sort field + if (empty($thead) && $field) // If this is a sort field { $options=preg_replace('/sortfield=([a-zA-Z0-9,\s\.]+)/i','',$moreparam); $options=preg_replace('/sortorder=([a-zA-Z0-9,\s\.]+)/i','',$options); @@ -2704,27 +2713,33 @@ function getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $m if (! preg_match('/^&/',$options)) $options='&'.$options; //print " "; - $out.= ''; + $sortimg.= ''; + $sortimg.= ''; if (! $sortorder || $field != $sortfield) { - $out.= ''.img_down("A-Z",0).''; - $out.= ''.img_up("Z-A",0).''; + //$out.= ''.img_down("A-Z",0).''; + //$out.= ''.img_up("Z-A",0).''; } else { if ($sortorder == 'DESC' ) { - $out.= ''.img_down("A-Z",0).''; - $out.= ''.img_up("Z-A",1).''; + //$out.= ''.img_down("A-Z",0).''; + //$out.= ''.img_up("Z-A",1).''; + $sortimg.= img_up("Z-A",0); } if ($sortorder == 'ASC' ) { - $out.= ''.img_down("A-Z",1).''; - $out.= ''.img_up("Z-A",0).''; + //$out.= ''.img_down("A-Z",1).''; + //$out.= ''.img_up("Z-A",0).''; + $sortimg.= img_down("A-Z",0); } } - $out.= ''; + $sortimg.= ''; } + + $out.=$sortimg; + $out.=''; return $out; diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index 5e73552e231..80e4c553dc1 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -333,13 +333,6 @@ if ($resql) $moreforfilter.=$langs->trans('SalesRepresentatives'). ': '; $moreforfilter.=$htmlother->select_salesrepresentatives($search_sale,'search_sale',$user); $moreforfilter.=''; - } - if ($moreforfilter) - { - print ''; - print ''; } */ if (! empty($moreforfilter)) From f29c03c9223592bfb7b6869b54f919d12a36577e Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 9 Oct 2015 16:35:14 +0200 Subject: [PATCH 24/51] Start to work on a multiselect component to select which fields to show into dolibarr lists. --- htdocs/core/class/html.form.class.php | 96 +++++++++++++++++++++++--- htdocs/societe/list.php | 48 +++++++++---- htdocs/theme/eldy/img/list.png | Bin 0 -> 83 bytes htdocs/theme/eldy/style.css.php | 55 +++++++++++++++ htdocs/theme/md/img/list.png | Bin 0 -> 83 bytes 5 files changed, 177 insertions(+), 22 deletions(-) create mode 100644 htdocs/theme/eldy/img/list.png create mode 100644 htdocs/theme/md/img/list.png diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 61afec22569..52b4290e83d 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -4591,34 +4591,36 @@ class Form { global $conf, $langs; + $out = ''; + // Add code for jquery to use multiselect if (! empty($conf->global->MAIN_USE_JQUERY_MULTISELECT) || defined('REQUIRE_JQUERY_MULTISELECT')) { $tmpplugin=empty($conf->global->MAIN_USE_JQUERY_MULTISELECT)?constant('REQUIRE_JQUERY_MULTISELECT'):$conf->global->MAIN_USE_JQUERY_MULTISELECT; - print ' + $out.=' + + '; + return $out; + } /** * Render list of categories linked to object with id $id and type $type diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php index 80e4c553dc1..501e54cce11 100644 --- a/htdocs/societe/list.php +++ b/htdocs/societe/list.php @@ -208,9 +208,9 @@ $title=$langs->trans("ListOfThirdParties"); $sql = "SELECT s.rowid, s.nom as name, s.barcode, s.town, s.datec, s.code_client, s.code_fournisseur, "; $sql.= " st.libelle as stcomm, s.prefix_comm, s.client, s.fournisseur, s.canvas, s.status as status,"; -$sql.= " s.siren as idprof1, s.siret as idprof2, ape as idprof3, idprof4 as idprof4"; -$sql.= ",s.fk_pays"; -$sql.= ",typent.code as typent_code"; +$sql.= " s.siren as idprof1, s.siret as idprof2, ape as idprof3, idprof4 as idprof4,"; +$sql.= " s.fk_pays, s.tms as date_update, s.datec as date_creation,"; +$sql.= " typent.code as typent_code"; // We'll need these fields in order to filter by sale (including the case where the user can only see his prospects) if ($search_sale) $sql .= ", sc.fk_soc, sc.fk_user"; // We'll need these fields in order to filter by categ @@ -345,10 +345,29 @@ if ($resql) print ''; } + // Define list of fields to show into list + $arrayfields=array( + 's.nom'=>array('label'=>$langs->trans("Company"), 'checked'=>1), + 's.barcode'=>array('label'=>$langs->trans("BarCode"), 'checked'=>1, 'cond'=>(! empty($conf->barcode->enabled))), + 's.town'=>array('label'=>$langs->trans("Town"), 'checked'=>1), + 'country.code_iso'=>array('label'=>$langs->trans("Country"), 'checked'=>1), + 'typent.code'=>array('label'=>$langs->trans("ThirdPartyType"), 'checked'=>1), + 's.siren'=>array('label'=>$langs->trans("ProfId1Short"), 'checked'=>1), + 's.siret'=>array('label'=>$langs->trans("ProfId2Short"), 'checked'=>1), + 's.ape'=>array('label'=>$langs->trans("ProfId3Short"), 'checked'=>1), + 's.idprof4'=>array('label'=>$langs->trans("ProfId4Short"), 'checked'=>1), + 's.status'=>array('label'=>$langs->trans("Status"), 'checked'=>1, 'position'=>200), + 's.tms'=>array('label'=>$langs->trans("DateModificationShort"), 'checked'=>0, 'position'=>500), + 's.datec'=>array('label'=>$langs->trans("DateCreation"), 'checked'=>0, 'position'=>500), + ); + if ($conf->global->MAIN_FEATURES_LEVEL >= 2) + { + $selectotherfields=$form->multiSelectArrayWithCheckbox('selectotherfields', $arrayfields); + } + print '
'; - print $moreforfilter; - print '
'; - - // Lines of titles - print ''; + + print ''; print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder); if (! empty($conf->barcode->enabled)) print_liste_field_titre($langs->trans("BarCode"), $_SERVER["PHP_SELF"], "s.barcode",$param,'','',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Town"),$_SERVER["PHP_SELF"],"s.town","",$param,'',$sortfield,$sortorder); @@ -363,7 +382,7 @@ if ($resql) $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters); // Note that $action and $object may have been modified by hook print $hookmanager->resPrint; print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"s.status","",$param,'align="right"',$sortfield,$sortorder); - print_liste_field_titre('',$_SERVER["PHP_SELF"],"",'','','',$sortfield,$sortorder,'maxwidthsearch '); + print_liste_field_titre($selectotherfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch '); print "\n"; // Fields title search @@ -372,18 +391,19 @@ if ($resql) print ''; print ''; if (! empty($search_nom_only) && empty($search_nom)) $search_nom=$search_nom_only; - print ''; + + print ''; print ''; // Barcode if (! empty($conf->barcode->enabled)) { print ''; } // Town print ''; //Country print ''; // IdProf1 print ''; // IdProf2 print ''; // IdProf3 print ''; // IdProf4 print ''; // Type (customer/prospect/supplier) print '
'; - print ''; + print ''; print ''; - print ''; + print ''; print ''; @@ -395,19 +415,19 @@ if ($resql) print ''; - print ''; + print ''; print ''; - print ''; + print ''; print ''; - print ''; + print ''; print ''; - print ''; + print ''; print ''; diff --git a/htdocs/theme/eldy/img/list.png b/htdocs/theme/eldy/img/list.png new file mode 100644 index 0000000000000000000000000000000000000000..f5df34a3bc9f8393c23f35e25fb7b18b4b51654b GIT binary patch literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mq&!_5Ln;`PC2l1!2{fHxmMCBf f>~dQxy@i3{%~LbRV2?L>KvfK$u6{1-oD!M<+N2cH literal 0 HcmV?d00001 diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 9f5376947da..2eddc0eba23 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -3487,6 +3487,61 @@ a span.select2-chosen } +/* ============================================================================== */ +/* Multiselect with checkbox */ +/* ============================================================================== */ + +dl.dropdown { + margin:0px; + padding:0px; +} +.dropdown dd, .dropdown dt { + margin:0px; + padding:0px; +} +.dropdown ul { + margin: -1px 0 0 0; + text-align: left; +} +.dropdown dd { + position:relative; +} +.dropdown dt a { + display:block; + overflow: hidden; + border:0; +} +.dropdown dt a span, .multiSel span { + cursor:pointer; + display:inline-block; + padding: 0 3px 2px 0; +} +.dropdown dd ul { + background-color: #FFF; + border: 1px solid #888; + display:none; + right:0px; /* pop is align on right */ + padding: 2px 15px 2px 5px; + position:absolute; + top:2px; + list-style:none; + max-height: 200px; + overflow: auto; +} +.dropdown span.value { + display:none; +} +.dropdown dd ul li { + white-space: nowrap; +} +.dropdown dd ul li a { + padding:5px; + display:block; +} +.dropdown dd ul li a:hover { + background-color:#fff; +} + /* ============================================================================== */ /* JMobile */ diff --git a/htdocs/theme/md/img/list.png b/htdocs/theme/md/img/list.png new file mode 100644 index 0000000000000000000000000000000000000000..f5df34a3bc9f8393c23f35e25fb7b18b4b51654b GIT binary patch literal 83 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|mq&!_5Ln;`PC2l1!2{fHxmMCBf f>~dQxy@i3{%~LbRV2?L>KvfK$u6{1-oD!M<+N2cH literal 0 HcmV?d00001 From 53e4cb3af926bf52c06bf3a2faee75346ae270b7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 9 Oct 2015 17:21:38 +0200 Subject: [PATCH 25/51] Several fix in CSS --- htdocs/theme/eldy/img/sort_asc.png | Bin 256 -> 248 bytes htdocs/theme/eldy/img/sort_desc.png | Bin 264 -> 260 bytes htdocs/theme/eldy/style.css.php | 10 +- htdocs/theme/md/style.css.php | 150 ++++++++++++++++++++++------ 4 files changed, 123 insertions(+), 37 deletions(-) diff --git a/htdocs/theme/eldy/img/sort_asc.png b/htdocs/theme/eldy/img/sort_asc.png index aca0f6eb77aa8b601a073daa9a94bfa9bd5cc7e8..82b250c72bd73cedf7196138285647383a216300 100644 GIT binary patch delta 177 zcmV;i08ama0{8)tB#|*Le+mf>G6?Z8qBsBm0EJ0JK~y-)?b4wQ!cY{3(Q^@ykT3;~ z88D22M5EaQ24D{qiy-j`3@PSfsA(Er+SHKrPd@kVQ7+Inu)wte)m<>_CxY!z;nh-wZQEV^ f@24HH5gTA1#Wet2_%IXM00000NkvXXu0mjf_YO-w delta 183 zcmV;o07(D%0e}LKBnkm@Qb$4nuFf3kks&dE1p^K=E9l_^c>n+afJsC_R5;7+(lHJ} zK@fo9Sp|v2DRj=DaSWwe?H lro}RMm;UG8zJi({KO)0Fg;VK~y-)?bIO-gFq04;r}7pgoIPn z^$ayV2C}-Ed(Z>)9#vcfiAU5BFoRh|rwdI;ieQpwcHew*WM-^22`kQy?bzQiNx7t6 zQs<+=u3vW|n1IIwdjk3yGYjAer~}jh=V(9n r8NfR*0L5%~0d@dNAf4-Kv&V4+V3ZPE5OdhM00000NkvXXu0mjf9C=JO delta 191 zcmV;w06_nQ0*C^TBnkm@Qb$4nuFf3kks&dE1p^K>AJ9(5jQ{`uh)G02R5;7+)G-bL zQ5Xc^Sp|v2DRj=DaSWwe?H(M!Jyb5D)GIWynoqNpJeFh=ik;+dUS_`XRY+GEq{H-B zkNpx`CaII$3Rfpt6;~+T2nXdHF)8g{VZj{NC+LF3tIa#C!tM#%H}79#!4#(kI%D=K tuHS|QYuvGE>wba_vBkKpTm9|l_yFr5ciURC7Lxz~002ovPDHLkV1mzcQkDP! diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 2eddc0eba23..62707beec64 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -537,7 +537,7 @@ td.showDragHandle { float: none; vertical-align: top; } -#id-right { /* This must stay id-right ant not be replaced with echo $right */ +#id-right { /* This must stay id-right and not be replaced with echo $right */ width: 100%; } #id-left { @@ -1894,7 +1894,7 @@ tr.nocellnopadd td.nobordernopadding, tr.nocellnopadd td.nocellnopadd table.border, table.dataTable, .table-border, .table-border-col, .table-key-border-col, .table-val-border-col, div.border { border: 1px solid #E0E0E0; - border-collapse: collapse; + border-collapse: collapse !important; padding: 1px 2px 1px 3px; /* t r b l */ } @@ -3362,7 +3362,7 @@ table.dataTable tr.odd td.sorting_1, table.dataTable tr.even td.sorting_1 { background-color: #FFF !important; border-radius: inherit !important; } -.paging_full_numbers a.paginate_button_disabled:hover { +.paging_full_numbers a.paginate_button_disabled:hover, .paging_full_numbers a.disabled:hover { background-color: #FFF !important; } .paginate_button, .paginate_active { @@ -3390,7 +3390,9 @@ div.dataTables_length { div.dataTables_length select { background: #fff; } - +.dataTables_wrapper .dataTables_paginate { + padding-top: 0px !important; +} /* ============================================================================== */ /* Select2 */ diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 0db79b5470a..336505215b5 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -456,6 +456,10 @@ textarea.centpercent { div.divsearchfield { float: ; margin-: 12px; + margin-: 2px; + margin-top: 3px; + margin-bottom: 3px; + padding-left: 2px; } div.confirmmessage { padding-top: 6px; @@ -1788,7 +1792,7 @@ tr.nocellnopadd td.nobordernopadding, tr.nocellnopadd td.nocellnopadd table.border, table.dataTable, .table-border, .table-border-col, .table-key-border-col, .table-val-border-col, div.border { border: 1px solid #f4f4f4; - border-collapse: collapse; + border-collapse: collapse !important; padding: 1px 2px 1px 3px; /* t r b l */ } @@ -1822,7 +1826,7 @@ td.border, div.tagtable div div.border { /* Main boxes */ -table.noborder, table.formdoc, div.noborder { +table.liste, table.noborder, table.formdoc, div.noborder { width: 100%; border-collapse: separate !important; @@ -1856,6 +1860,9 @@ table.noborder tr, div.noborder form { height: 26px; } +table.liste th, table.noborder th { + padding: 5px 2px 5px 3px; /* t r b l */ +} table.noborder th, table.noborder td, div.noborder form, div.noborder form div { padding: 1px 2px 1px 3px; /* t r b l */ } @@ -1883,35 +1890,9 @@ td.borderright { border-right-style: solid !important; } -/* For lists */ - -table.liste { - width: 100%; - border-collapse: collapse; - border-top-color: #FEFEFE; - - border-right-width: 1px; - border-right-color: #CCC; - border-right-style: solid; - -/* - border-bottom-width: 1px; - border-bottom-color: #BBBBBB; - border-bottom-style: solid; -*/ - border-left-width: 1px; - border-left-color: #CCC; - border-left-style: solid; - - margin-bottom: 2px; - margin-top: 0px; - - -moz-box-shadow: 0px 3px 4px #CCC; - -webkit-box-shadow: 0px 3px 4px #CC; - box-shadow: 0px 3px 4px #CCC; -} -table.liste td { - padding-right: 2px; +/* For table with no filter before */ +table.listwithfilterbefore { + border-top: none !important; } .tagtable, .table-border { display: table; } @@ -2050,6 +2031,9 @@ div.pagination li.pagination .active { div.pagination li.paginationafterarrows { margin-left: 10px; } +.paginationatbottom { + margin-top: 9px; +} /* Prepare to remove class pair - impair .noborder > tbody > tr:nth-child(even) td { @@ -2139,6 +2123,29 @@ div.liste_titre .tagtd { } div.liste_titre { min-height: 26px !important; /* We cant use height because it's a div and it should be higher if content is more. but min-height doe not work either for div */ + + padding-top: 2px; + padding-bottom: 2px; + + border-right-width: 1px; + border-right-color: #BBB; + border-right-style: solid; + + border-left-width: 1px; + border-left-color: #BBB; + border-left-style: solid; + + border-top-width: 1px; + border-top-color: #BBB; + border-top-style: solid; +} +div.liste_titre_bydiv { + box-shadow: none; + border-collapse: collapse; + display: table; + padding: 2px 0px 2px 0; + box-shadow: 2px 2px 4px #CCC; + width: calc(100% - 1px); /* 1px more, i don't know why */ } tr.liste_titre, tr.liste_titre_sel, form.liste_titre, form.liste_titre_sel, table.dataTable.tr { @@ -2425,7 +2432,12 @@ td.legendLabel { padding: 2px 2px 2px 0 !important; } margin-bottom: 2px; margin-top: 2px; } -.photointooltip { +.photowithmargin { +/* -webkit-box-shadow: 0px 0px 3px #777; + -moz-box-shadow: 0px 0px 3px #777; + box-shadow: 0px 0px 3px #777;*/ +} +.photointoolitp { margin-top: 8px; float: left; /*text-align: center; */ @@ -3221,7 +3233,7 @@ table.dataTable tr.odd td.sorting_1, table.dataTable tr.even td.sorting_1 { background-color: #FFF !important; border-radius: inherit !important; } -.paging_full_numbers a.paginate_button_disabled:hover { +.paging_full_numbers a.paginate_button_disabled:hover, .paging_full_numbers a.disabled:hover { background-color: #FFF !important; } .paginate_button, .paginate_active { @@ -3242,10 +3254,26 @@ table.dataTable tr.odd td.sorting_1, table.dataTable tr.even td.sorting_1 { background-image: none; } +div.dataTables_length { + float: right !important; + padding-left: 8px; +} +div.dataTables_length select { + background: #fff; +} +.dataTables_wrapper .dataTables_paginate { + padding-top: 0px !important; +} + + /* ============================================================================== */ /* Select2 */ /* ============================================================================== */ +.selectoptiondisabledwhite { + background: #FFFFFF !important; +} + .select2-choice, .select2-drop.select2-drop-above.select2-drop-active, .select2-container-active .select2-choice, @@ -3333,6 +3361,62 @@ a span.select2-chosen } +/* ============================================================================== */ +/* Multiselect with checkbox */ +/* ============================================================================== */ + +dl.dropdown { + margin:0px; + padding:0px; +} +.dropdown dd, .dropdown dt { + margin:0px; + padding:0px; +} +.dropdown ul { + margin: -1px 0 0 0; + text-align: left; +} +.dropdown dd { + position:relative; +} +.dropdown dt a { + display:block; + overflow: hidden; + border:0; +} +.dropdown dt a span, .multiSel span { + cursor:pointer; + display:inline-block; + padding: 0 3px 2px 0; +} +.dropdown dd ul { + background-color: #FFF; + border: 1px solid #888; + display:none; + right:0px; /* pop is align on right */ + padding: 2px 15px 2px 5px; + position:absolute; + top:2px; + list-style:none; + max-height: 200px; + overflow: auto; +} +.dropdown span.value { + display:none; +} +.dropdown dd ul li { + white-space: nowrap; +} +.dropdown dd ul li a { + padding:5px; + display:block; +} +.dropdown dd ul li a:hover { + background-color:#fff; +} + + /* ============================================================================== */ /* JMobile */ /* ============================================================================== */ From b785db86a8c5ed58fec47dcc24dedf0d34eb2a26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Doursenaud?= Date: Fri, 9 Oct 2015 19:00:50 +0200 Subject: [PATCH 26/51] Fix unittests regression Introduced by incomplete renaming of modSyncSupplierWebServices to modWebServicesClient in 4b103ba8ce6c2da955ab8ecb17258b5ba0f52b40 --- htdocs/core/modules/modWebServicesClient.class.php | 2 +- htdocs/install/filelist.xml | 2 +- test/phpunit/ModulesTest.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/modules/modWebServicesClient.class.php b/htdocs/core/modules/modWebServicesClient.class.php index dd13d8920db..307f3420640 100644 --- a/htdocs/core/modules/modWebServicesClient.class.php +++ b/htdocs/core/modules/modWebServicesClient.class.php @@ -18,7 +18,7 @@ /** * \defgroup webservices Module webservices * \brief Module to enable client for supplier WebServices - * \file htdocs/core/modules/modSyncSupplierWebServices.class.php + * \file htdocs/core/modules/modWebServicesClient.class.php * \ingroup webservices * \brief File to describe client for supplier webservices module */ diff --git a/htdocs/install/filelist.xml b/htdocs/install/filelist.xml index fb931f9fcdc..6e5416e2481 100644 --- a/htdocs/install/filelist.xml +++ b/htdocs/install/filelist.xml @@ -6873,7 +6873,7 @@ 69982f8171837cd8669bfe9c2f08dc8f ddf6dfeb77c98411b4d5434f20c24483 c23010fa68c5996cb5977f84a6bb7ceb -90a300e9bd857966226c68dca8660456 +822961d86ae558588632b3b08c085b89 d41d8cd98f00b204e9800998ecf8427e b4e9f07aa5268af49d3bb9429719b201 8293bd60fe13ac64c22f8500b346821c diff --git a/test/phpunit/ModulesTest.php b/test/phpunit/ModulesTest.php index 3c8b96ffe2a..9210ae1a46a 100755 --- a/test/phpunit/ModulesTest.php +++ b/test/phpunit/ModulesTest.php @@ -133,7 +133,7 @@ class ModulesTest extends PHPUnit_Framework_TestCase 'Facture','Fckeditor','Ficheinter','Fournisseur','FTP','GeoIPMaxmind','Gravatar','Holiday','Import','Label','Ldap', 'Mailing','MailmanSpip','Margin', 'Notification','OpenSurvey','Paybox','Paypal','Prelevement','Product','ProductBatch','Projet','Propale', - 'Salaries','Service','Skype','Societe','Stock','SyncSupplierWebServices','Syslog','Tax','User','WebServices','Workflow'); + 'Salaries','Service','Skype','Societe','Stock','WebServicesClient','Syslog','Tax','User','WebServices','Workflow'); foreach($modulelist as $modlabel) { require_once(DOL_DOCUMENT_ROOT.'/core/modules/mod'.$modlabel.'.class.php'); From a1d37f92cbfd399045814af5bff71099c03fe26d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Fri, 9 Oct 2015 20:00:43 +0200 Subject: [PATCH 27/51] Several fix in CSS --- htdocs/adherents/stats/byproperties.php | 2 +- htdocs/adherents/stats/geo.php | 2 +- htdocs/adherents/stats/index.php | 12 +++-- htdocs/comm/propal/stats/index.php | 12 +++-- htdocs/commande/list.php | 6 +-- htdocs/commande/stats/index.php | 13 +++-- htdocs/compta/facture.php | 14 ++--- htdocs/compta/facture/stats/index.php | 13 +++-- htdocs/contrat/card.php | 13 ++--- htdocs/contrat/list.php | 52 +++++++++++++++---- htdocs/product/stats/commande.php | 6 ++- htdocs/product/stats/commande_fournisseur.php | 6 ++- htdocs/product/stats/contrat.php | 8 +-- htdocs/product/stats/facture.php | 11 ++-- htdocs/product/stats/facture_fournisseur.php | 6 ++- htdocs/product/stats/propal.php | 6 ++- htdocs/projet/stats/index.php | 14 +++-- htdocs/theme/eldy/style.css.php | 11 +++- htdocs/theme/md/style.css.php | 12 +++-- 19 files changed, 143 insertions(+), 76 deletions(-) diff --git a/htdocs/adherents/stats/byproperties.php b/htdocs/adherents/stats/byproperties.php index 6f5edf529d9..dcf77a2dbad 100644 --- a/htdocs/adherents/stats/byproperties.php +++ b/htdocs/adherents/stats/byproperties.php @@ -116,7 +116,7 @@ else } // Print array -print ''; +print '
'; print ''; print ''; print ''; diff --git a/htdocs/adherents/stats/geo.php b/htdocs/adherents/stats/geo.php index 3b2ca4c3ecd..f8b6a54f7b7 100644 --- a/htdocs/adherents/stats/geo.php +++ b/htdocs/adherents/stats/geo.php @@ -282,7 +282,7 @@ if (count($arrayjs) && $mode == 'memberbycountry') if ($mode) { // Print array / Affiche le tableau - print '
'.$langs->trans("Nature").''.$langs->trans("NbOfMembers").'
'; + print '
'; print ''; print ''; if ($label2) print ''; diff --git a/htdocs/adherents/stats/index.php b/htdocs/adherents/stats/index.php index a3c8fd69aad..43b994adafe 100644 --- a/htdocs/adherents/stats/index.php +++ b/htdocs/adherents/stats/index.php @@ -167,8 +167,8 @@ print '

'; $data = $stats->getAllByYear(); -print '
'.$label.''.$label2.'
'; -print ''; +print '
'; +print ''; print ''; print ''; print ''; @@ -176,14 +176,15 @@ print ''; print ''; $oldyear=0; +$var=false; foreach ($data as $val) { $year = $val['year']; - print $avg; while ($oldyear > $year+1) { // If we have empty year $oldyear--; - print ''; + $var=!$var; + print ''; print ''; print ''; } - print ''; + $var=!$var; + print ''; print '"; // Name - print ''; + print ''; // URL - print ''; + print ''; // Offset TZ - print ''; + print ''; // Color (Possible colors are limited by Google) print ''; print ""; $i++; @@ -193,6 +199,7 @@ while ($i <= $MAXAGENDA) print '
'.$langs->trans("Year").''.$langs->trans("NbOfSubscriptions").''.$langs->trans("AmountTotal").''.$langs->trans("AmountAverage").'
'; print ''; print $oldyear; @@ -194,7 +195,8 @@ foreach ($data as $val) print '0
'; //print ''; print $year; diff --git a/htdocs/comm/propal/stats/index.php b/htdocs/comm/propal/stats/index.php index e99c7122a10..5b45020b7e1 100644 --- a/htdocs/comm/propal/stats/index.php +++ b/htdocs/comm/propal/stats/index.php @@ -234,7 +234,7 @@ print '
'; // Show filter box print '
'; print ''; - print ''; + print '
'; print ''; // Company print ''; } diff --git a/htdocs/core/tpl/objectline_create.tpl.php b/htdocs/core/tpl/objectline_create.tpl.php index 938a615ea77..64c49894de1 100644 --- a/htdocs/core/tpl/objectline_create.tpl.php +++ b/htdocs/core/tpl/objectline_create.tpl.php @@ -114,12 +114,12 @@ else { } // Free line - echo ''; + echo ''; // Show radio free line if ($forceall >= 0 && (! empty($conf->product->enabled) || ! empty($conf->service->enabled))) { echo '
'.$langs->trans("Filter").'
'.$langs->trans("ThirdParty").''; @@ -262,8 +262,8 @@ print '
'; print '

'; //} -print ''; -print ''; +print '
'; +print ''; print ''; print ''; print ''; @@ -274,13 +274,15 @@ print ''; print ''; $oldyear=0; +$var=true; foreach ($data as $val) { $year = $val['year']; while (! empty($year) && $oldyear > $year+1) { // If we have empty year $oldyear--; - print ''; + $var=!$var; + print ''; print ''; print ''; print ''; @@ -290,7 +292,7 @@ foreach ($data as $val) print ''; print ''; } - print ''; + print ''; print ''; print ''; print ''; diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php index 200f9e66362..29d58eaf467 100644 --- a/htdocs/commande/list.php +++ b/htdocs/commande/list.php @@ -273,15 +273,15 @@ if ($resql) $moreforfilter.=$formother->select_salesrepresentatives($search_sale, 'search_sale', $user, 0, 1, 'maxwidth300'); $moreforfilter.=''; } - // If the user can view prospects other than his' - if ($user->rights->societe->client->voir || $socid) + // If the user can view other users + if ($user->rights->user->user->lire) { $moreforfilter.='
'; $moreforfilter.=$langs->trans('LinkedToSpecificUsers'). ': '; $moreforfilter.=$form->select_dolusers($search_user, 'search_user', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300'); $moreforfilter.='
'; } - // If the user can view prospects other than his' + // If the user can view categories or products if ($conf->categorie->enabled && $user->rights->produit->lire) { include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; diff --git a/htdocs/commande/stats/index.php b/htdocs/commande/stats/index.php index c4d48d8f72e..04cfad1732d 100644 --- a/htdocs/commande/stats/index.php +++ b/htdocs/commande/stats/index.php @@ -250,7 +250,7 @@ print '
'; // Show filter box print ''; print ''; - print '
'.$langs->trans("Year").''.$langs->trans("NbOfProposals").'%%
0?'&userid='.$userid:'').'">'.$oldyear.'0
0?'&userid='.$userid:'').'">'.$year.''.$val['nb'].''.round($val['nb_diff']).'
'; + print '
'; print ''; // Company print '"; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index a319b193662..627a9aaffca 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -858,27 +858,40 @@ function dol_get_fiche_end($notab=0) */ function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlright='') { - global $conf, $form, $user; + global $conf, $form, $user, $langs; //$showlogo=$object->logo; $showlogo=1; $showbarcode=empty($conf->barcode->enabled)?0:1; if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) $showbarcode=0; - + $modulepart='societe'; + if ($object->element == 'contact') $modulepart='contact'; + if ($object->element == 'member') $modulepart='memberphoto'; + if ($object->element == 'user') $modulepart='userphoto'; + print '
'; //$morehtmlleft='
'.img_picto('', 'title_companies', '', '').'
'; - if ($showlogo) $morehtmlleft.='
'.$form->showphoto('societe',$object,0,0,0,'photoref').'
'; + if ($showlogo) $morehtmlleft.='
'.$form->showphoto($modulepart,$object,0,0,0,'photoref').'
'; //if ($showlogo) $morehtmlleft.='
'.$form->showphoto('societe',$object,0,0,0,'photoref').'
'; if ($showbarcode) $morehtmlleft.='
'.$form->showbarcode($object).'
'; - if (! empty($conf->use_javascript_ajax) && $user->rights->societe->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { - $morehtmlright.=ajax_object_onoff($object, 'status', 'status', 'InActivity', 'ActivityCeased'); - } else { - $morehtmlright.=$object->getLibStatut(2); + if ($object->element == 'societe') + { + if (! empty($conf->use_javascript_ajax) && $user->rights->societe->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { + $morehtmlright.=ajax_object_onoff($object, 'status', 'status', 'InActivity', 'ActivityCeased'); + } else { + $morehtmlright.=$object->getLibStatut(2); + } } if (! empty($object->name_nalias)) $morehtmlref.='
'.$object->name_alias.'
'; $morehtmlref.='
'; $morehtmlref.=$object->getBannerAddress('refaddress',$object); $morehtmlref.='
'; + if (! empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && in_array($object->element, array('societe', 'contact', 'member'))) + { + $morehtmlref.='
'; + $morehtmlref.=$langs->trans("TechnicalID").': '.$object->id; + $morehtmlref.='
'; + } print $form->showrefnav($object, $paramid, $morehtml, $shownav, $fieldid, $fieldref, $morehtmlref, $moreparam, $nodbprefix, $morehtmlleft, $morehtmlright); print '
'; print '
'; @@ -1484,12 +1497,13 @@ function dol_print_skype($skype,$cid=0,$socid=0,$addlink=0,$max=64) * @param string $country Country code to use for formatting * @param int $cid Id of contact if known * @param int $socid Id of third party if known - * @param string $addlink ''=no link to create action, 'AC_TEL'=add link to clicktodial (if module enabled) and add link to create event (if conf->global->AGENDA_ADDACTIONFORPHONE set) + * @param string $addlink ''=no link to create action, 'AC_TEL'=add link to clicktodial (if module enabled) and add link to create event (if conf->global->AGENDA_ADDACTIONFORPHONE set) * @param string $separ Separation between numbers for a better visibility example : xx.xx.xx.xx.xx * @param string $withpicto Show picto + * @param string $titlealt Text to show on alt * @return string Formated phone number */ -function dol_print_phone($phone,$country='',$cid=0,$socid=0,$addlink='',$separ=" ",$withpicto='') +function dol_print_phone($phone,$country='',$cid=0,$socid=0,$addlink='',$separ=" ",$withpicto='',$titlealt='') { global $conf,$user,$langs,$mysoc; @@ -1569,7 +1583,11 @@ function dol_print_phone($phone,$country='',$cid=0,$socid=0,$addlink='',$separ=" } } - return '
'.($withpicto?img_picto(($withpicto=='fax'?$langs->trans("Fax"):$langs->trans("Phone")), 'object_'.($withpicto=='fax'?'phoning_fax':'phoning').'.png').' ':'').$newphone.'
'; + if (empty($titlealt)) + { + $titlealt=($withpicto=='fax'?$langs->trans("Fax"):$langs->trans("Phone")); + } + return '
'.($withpicto?img_picto($titlealt, 'object_'.($withpicto=='fax'?'phoning_fax':'phoning').'.png').' ':'').$newphone.'
'; } /** diff --git a/htdocs/langs/en_US/main.lang b/htdocs/langs/en_US/main.lang index 0bd4fa7431b..ce3f8edc0d8 100644 --- a/htdocs/langs/en_US/main.lang +++ b/htdocs/langs/en_US/main.lang @@ -97,6 +97,7 @@ DolibarrHasDetectedError=Dolibarr has detected a technical error InformationToHelpDiagnose=This is information that can help diagnostic MoreInformation=More information TechnicalInformation=Technical information +TechnicalID=Technical ID NotePublic=Note (public) NotePrivate=Note (private) PrecisionUnitIsLimitedToXDecimals=Dolibarr was setup to limit precision of unit prices to %s decimals. diff --git a/htdocs/societe/soc.php b/htdocs/societe/soc.php index 9c8f4c90aa5..a603f52e226 100644 --- a/htdocs/societe/soc.php +++ b/htdocs/societe/soc.php @@ -1447,6 +1447,14 @@ else print '
'.$langs->trans("Filter").'
'.$langs->trans("ThirdParty").''; @@ -275,8 +275,8 @@ print '
'; print '

'; //} -print ''; -print ''; +print '
'; +print ''; print ''; print ''; print ''; @@ -287,13 +287,15 @@ print ''; print ''; $oldyear=0; +$var=true; foreach ($data as $val) { $year = $val['year']; while (! empty($year) && $oldyear > $year+1) { // If we have empty year $oldyear--; - print ''; + $var=!$var; + print ''; print ''; print ''; @@ -305,7 +307,8 @@ foreach ($data as $val) print ''; } - print ''; + $var=!$var; + print ''; print ''; print ''; print ''; diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 5c19e054fd0..c736d4cd003 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -2973,16 +2973,16 @@ else if ($id > 0 || ! empty($ref)) print '"; From 525f9841faf80f5ff915bbc23c3de24286511a26 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 10 Oct 2015 18:38:22 +0200 Subject: [PATCH 35/51] Fix doxygen --- htdocs/core/class/commonobject.class.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 76fd73a324d..a4bacf4d34c 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -437,10 +437,11 @@ abstract class CommonObject /** * Return full address of contact * - * @param Societe $object Object Societe or null + * @param string $htmlkey HTML id to make banner content unique + * @param Object $object Object (thirdparty, thirdparty of contact for contact, null for a member) * @return string Full address string */ - function getBannerAddress($htmlkey, $object=null) + function getBannerAddress($htmlkey, $object) { global $conf, $langs; @@ -465,7 +466,7 @@ abstract class CommonObject $outdone++; } - if (! in_array($object->country_code,$countriesusingstate) && empty($conf->global->MAIN_FORCE_STATE_INTO_ADDRESS) + if (! in_array($this->country_code,$countriesusingstate) && empty($conf->global->MAIN_FORCE_STATE_INTO_ADDRESS) && ! empty($conf->global->SOCIETE_DISABLE_STATE) && $this->state) { $out.=($outdone?'
':'').$this->state; From 6ec77e2ca096bf9e540f338eab8ed18c62e99031 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 11 Oct 2015 12:27:04 +0200 Subject: [PATCH 36/51] New banner card on contact card. --- htdocs/contact/card.php | 108 ++++++++++++++--------- htdocs/core/class/commonobject.class.php | 37 +++++--- htdocs/core/class/html.form.class.php | 11 ++- htdocs/core/lib/company.lib.php | 2 +- htdocs/core/lib/functions.lib.php | 38 +++++--- htdocs/langs/en_US/main.lang | 1 + htdocs/societe/soc.php | 19 ++-- htdocs/theme/eldy/style.css.php | 8 +- htdocs/theme/md/style.css.php | 2 +- 9 files changed, 152 insertions(+), 74 deletions(-) diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php index 2db5523c5bd..35ad3b8c3a1 100644 --- a/htdocs/contact/card.php +++ b/htdocs/contact/card.php @@ -4,10 +4,10 @@ * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2007 Franky Van Liedekerke - * Copyright (C) 2013 Florian Henry + * Copyright (C) 2013 Florian Henry * Copyright (C) 2013 Alexandre Spangaro * Copyright (C) 2014 Juanjo Menent - * 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 @@ -773,11 +773,14 @@ else print '
'.$langs->trans("Year").''.$langs->trans("NbOfOrders").'%%
0?'&userid='.$userid:'').'">'.$oldyear.'0
0?'&userid='.$userid:'').'">'.$year.''.$val['nb'].''.round($val['nb_diff']).''; - print ''; + print '
'; // List of payments already done print ''; - print ''; - print ''; + print ''; + print ''; if (! empty($conf->banque->enabled)) - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; print ''; $var = true; @@ -3033,7 +3033,7 @@ else if ($id > 0 || ! empty($ref)) $i ++; } } else { - print ''; + print ''; } // } $db->free($result); diff --git a/htdocs/compta/facture/stats/index.php b/htdocs/compta/facture/stats/index.php index f61e92687f6..2b7e17d9369 100644 --- a/htdocs/compta/facture/stats/index.php +++ b/htdocs/compta/facture/stats/index.php @@ -234,7 +234,7 @@ print '
'; // Show filter box print ''; print ''; - print '
' . ($object->type == Facture::TYPE_CREDIT_NOTE ? $langs->trans("PaymentsBack") : $langs->trans('Payments')) . '' . $langs->trans('Type') . '' . ($object->type == Facture::TYPE_CREDIT_NOTE ? $langs->trans("PaymentsBack") : $langs->trans('Payments')) . '' . $langs->trans('Type') . '' . $langs->trans('BankAccount') . '' . $langs->trans('Amount') . ' ' . $langs->trans('BankAccount') . '' . $langs->trans('Amount') . ' 
' . $langs->trans("None") . '
' . $langs->trans("None") . '
'; + print '
'; print ''; // Company print '"; - - print '"; + + print ''; - $country_code = getCountry($obj->country_id, 'all'); - // Address and phone print ''; // Status diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 81f14683383..443749dd271 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1315,20 +1315,25 @@ function dol_print_size($size,$shortvalue=0,$shortunit=0) * @param string $url Url to show * @param string $target Target for link * @param int $max Max number of characters to show + * @param int $withpicto With picto * @return string HTML Link */ -function dol_print_url($url,$target='_blank',$max=32) +function dol_print_url($url,$target='_blank',$max=32,$withpicto=0) { + global $langs; + if (empty($url)) return ''; $link=''; + $link.='"'; + if ($target) $link.=' target="'.$target.'"'; + $link.='>'; if (! preg_match('/^http/i',$url)) $link.='http://'; $link.=dol_trunc($url,$max); $link.=''; - return $link; + return '
'.($withpicto?img_picto($langs->trans("Url"), 'object_globe.png').' ':'').$link.'
'; } /** @@ -1591,26 +1596,30 @@ function dol_user_country() /** * Format address string * - * @param string $address Address - * @param int $htmlid Html ID (for example 'gmap') - * @param int $mode thirdparty|contact|member|other - * @param int $id Id of object - * @return void + * @param string $address Address + * @param int $htmlid Html ID (for example 'gmap') + * @param int $mode thirdparty|contact|member|other + * @param int $id Id of object + * @param int $noprint No output. Result is the function return + * @return string|void Nothing if noprint is 0, formatted address if noprint is 1 * @see dol_format_address */ -function dol_print_address($address, $htmlid, $mode, $id) +function dol_print_address($address, $htmlid, $mode, $id, $noprint=0) { global $conf, $user, $langs, $hookmanager; + $out = ''; + if ($address) { if ($hookmanager) { $parameters = array('element' => $mode, 'id' => $id); $reshook = $hookmanager->executeHooks('printAddress', $parameters, $address); - print $hookmanager->resPrint; + $out.=$hookmanager->resPrint; } - if (empty($reshook)) { - print nl2br($address); + if (empty($reshook)) + { + $out.=nl2br($address); $showgmap=$showomap=0; if ($mode=='thirdparty' && ! empty($conf->google->enabled) && ! empty($conf->global->GOOGLE_ENABLE_GMAPS)) $showgmap=1; if ($mode=='contact' && ! empty($conf->google->enabled) && ! empty($conf->global->GOOGLE_ENABLE_GMAPS_CONTACTS)) $showgmap=1; @@ -1623,15 +1632,17 @@ function dol_print_address($address, $htmlid, $mode, $id) if ($showgmap) { $url=dol_buildpath('/google/gmaps.php?mode='.$mode.'&id='.$id,1); - print ' '; + $out.=' '; } if ($showomap) { $url=dol_buildpath('/openstreetmap/maps.php?mode='.$mode.'&id='.$id,1); - print ' '; + $out.=' '; } } } + if ($noprint) return $out; + else print $out; } diff --git a/htdocs/societe/soc.php b/htdocs/societe/soc.php index 0411e974f2d..aad1a8aae48 100644 --- a/htdocs/societe/soc.php +++ b/htdocs/societe/soc.php @@ -1727,7 +1727,7 @@ else // Capital print ''; - print ''; + print ''; // Default language if (! empty($conf->global->MAIN_MULTILANGS)) @@ -1863,10 +1863,30 @@ else dol_htmloutput_errors($error,$errors); - $showlogo=$object->logo; + //$showlogo=$object->logo; + $showlogo=1; $showbarcode=empty($conf->barcode->enabled)?0:1; if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) $showbarcode=0; + print '
'; + //$morehtmlleft='
'.img_picto('', 'title_companies', '', '').'
'; + if ($showlogo) $morehtmlleft.='
'.$form->showphoto('societe',$object,0,0,0,'photoref').'
'; + //if ($showlogo) $morehtmlleft.='
'.$form->showphoto('societe',$object,0,0,0,'photoref').'
'; + if ($showbarcode) $morehtmlleft.='
'.$form->showbarcode($object).'
'; + if (! empty($conf->use_javascript_ajax) && $user->rights->societe->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { + $morehtmlright.=ajax_object_onoff($object, 'status', 'status', 'InActivity', 'ActivityCeased'); + } else { + $morehtmlright.=$object->getLibStatut(2); + } + $morehtml=''; + if (! empty($object->ame_nalias)) $morehtml.='
'.$object->name_alias.'
'; + $morehtml.='
'; + $morehtml.=$object->getBannerAddress('refaddress',$object); + $morehtml.='
'; + print $form->showrefnav($object, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom', $morehtml, '', 0, $morehtmlleft, $morehtmlright); + print '
'; + print '
'; + print '
'.$langs->trans("Filter").'
'.$langs->trans("ThirdParty").''; @@ -259,8 +259,8 @@ print '
'; print '

'; //} -print ''; -print ''; +print '
'; +print ''; print ''; print ''; print ''; @@ -271,13 +271,15 @@ print ''; print ''; $oldyear=0; +$var=true; foreach ($data as $val) { $year = $val['year']; while ($year && $oldyear > $year+1) { // If we have empty year $oldyear--; - print ''; + $var=!$var; + print ''; print ''; print ''; print ''; @@ -287,7 +289,8 @@ foreach ($data as $val) print ''; print ''; } - print ''; + $var=!$var; + print ''; print ''; print ''; print ''; diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 5615eaf76a4..f7363984fb8 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -1407,26 +1407,19 @@ else print ''; - print ''; - print ''; - print ''; + print_liste_field_titre($staticcontratligne->LibStatut(0,3), '', '', '', '', 'width="16"'); + print_liste_field_titre($staticcontratligne->LibStatut(4,3,0), '', '', '', '', 'width="16"'); + print_liste_field_titre($staticcontratligne->LibStatut(4,3,1), '', '', '', '', 'width="16"'); + print_liste_field_titre($staticcontratligne->LibStatut(5,3), '', '', '', '', 'width="16"'); + print_liste_field_titre('',$_SERVER["PHP_SELF"],"",'','','',$sortfield,$sortorder,'maxwidthsearch '); print "\n"; print ''; @@ -193,7 +225,8 @@ if ($resql) print ''; print ''; //print ''; - print ''; + print '\n"; @@ -253,6 +286,7 @@ if ($resql) print ''; print ''; print ''; + print ''; print "\n"; $i++; } diff --git a/htdocs/product/stats/commande.php b/htdocs/product/stats/commande.php index 9491b18da1e..f90235a143f 100644 --- a/htdocs/product/stats/commande.php +++ b/htdocs/product/stats/commande.php @@ -188,7 +188,8 @@ if ($id > 0 || ! empty($ref)) } print_barre_liste($langs->trans("CustomersOrders"),$page,$_SERVER["PHP_SELF"],"&id=$product->id",$sortfield,$sortorder,'',$num,$totalrecords,''); - print '
'; + print '
'; + print '
'; print $langs->trans('Period').' ('.$langs->trans("OrderDate") .') - '; print $langs->trans('Month') . ': '; print $langs->trans('Year') . ':' . $formother->selectyear($search_year ? $search_year : - 1, 'search_year', 1, 20, 5); @@ -197,9 +198,10 @@ if ($id > 0 || ! empty($ref)) print ''; print '
'; print '
'; + print '
'; $i = 0; - print '
'.$langs->trans("Year").''.$langs->trans("NumberOfBills").'%%
0?'&userid='.$userid:'').'">'.$oldyear.'0
0?'&userid='.$userid:'').'">'.$year.''.$val['nb'].''.round($val['nb_diff']).''; if ($user->rights->contrat->creer && count($arrayothercontracts) && ($object->statut >= 0)) { - print ''; + print ''; print img_picto($langs->trans("MoveToAnotherContract"),'uparrow'); print ''; } - else { - print ' '; - } if ($user->rights->contrat->creer && ($object->statut >= 0)) { - print ''; + print ''; print img_edit(); print ''; } - else { - print ' '; - } if ( $user->rights->contrat->creer && ($object->statut >= 0)) { - print ' '; - print ''; + print ''; print img_delete(); print ''; } diff --git a/htdocs/contrat/list.php b/htdocs/contrat/list.php index a4f719cf7f5..9619713859a 100644 --- a/htdocs/contrat/list.php +++ b/htdocs/contrat/list.php @@ -49,8 +49,10 @@ $search_ref_supplier=GETPOST('search_ref_supplier','alpha'); $sall=GETPOST('sall'); $search_status=GETPOST('search_status'); $socid=GETPOST('socid'); +$search_user=GETPOST('search_user','int'); +$search_sale=GETPOST('search_sale','int'); +$search_product_category=GETPOST('search_product_category','int'); -$search_sale = GETPOST('search_sale','int'); $optioncss = GETPOST('optioncss','alpha'); if (! $sortfield) $sortfield="c.rowid"; @@ -69,7 +71,9 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both $search_name=""; $search_contract=""; $search_ref_supplier=""; - $search_sale=""; + $search_user=''; + $search_sale=''; + $search_product_category=''; $sall=""; $search_status=""; } @@ -82,6 +86,7 @@ if ($search_status == '') $search_status=1; */ $now=dol_now(); +$form=new Form($db); $formother = new FormOther($db); $socstatic = new Societe($db); @@ -99,8 +104,15 @@ $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; if ($search_sale > 0 || (! $user->rights->societe->client->voir && ! $socid)) $sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; $sql.= ", ".MAIN_DB_PREFIX."contrat as c"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."contratdet as cd ON c.rowid = cd.fk_contrat"; +if ($search_product_category > 0) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'categorie_product as cp ON cp.fk_product=cd.fk_product'; +if ($search_user > 0) +{ + $sql.=", ".MAIN_DB_PREFIX."element_contact as ec"; + $sql.=", ".MAIN_DB_PREFIX."c_type_contact as tc"; +} $sql.= " WHERE c.fk_soc = s.rowid "; -$sql.= " AND c.entity = ".$conf->entity; +$sql.= ' AND c.entity IN ('.getEntity('contract', 1).')'; +if ($search_product_category > 0) $sql.=" AND cp.fk_categorie = ".$search_product_category; if ($socid) $sql.= " AND s.rowid = ".$db->escape($socid); if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; @@ -122,6 +134,7 @@ if ($search_sale > 0) if ($sall) { $sql .= natural_search(array('s.nom', 'cd.label', 'cd.description'), $sall); } +if ($search_user > 0) $sql.= " AND ec.fk_c_type_contact = tc.rowid AND tc.element='contrat' AND tc.source='internal' AND ec.element_id = c.rowid AND ec.fk_socpeople = ".$search_user; $sql.= " GROUP BY c.rowid, c.ref, c.datec, c.date_contrat, c.statut, c.ref_supplier, s.nom, s.rowid"; $sql.= $db->order($sortfield,$sortorder); $sql.= $db->plimit($conf->liste_limit + 1, $offset); @@ -147,7 +160,25 @@ if ($resql) $moreforfilter.=$formother->select_salesrepresentatives($search_sale,'search_sale',$user); $moreforfilter.=''; } - + // If the user can view other users + if ($user->rights->user->user->lire) + { + $moreforfilter.='
'; + $moreforfilter.=$langs->trans('LinkedToSpecificUsers'). ': '; + $moreforfilter.=$form->select_dolusers($search_user, 'search_user', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300'); + $moreforfilter.='
'; + } + // If the user can view categories of products + if ($conf->categorie->enabled && $user->rights->produit->lire) + { + include_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; + $moreforfilter.='
'; + $moreforfilter.=$langs->trans('IncludingProductWithTag'). ': '; + $cate_arbo = $form->select_all_categories(Categorie::TYPE_PRODUCT, null, 'parent', null, null, 1); + $moreforfilter.=$form->selectarray('search_product_category', $cate_arbo, $search_product_category, 1, 0, 0, '', 0, 0, 0, 0, '', 1); + $moreforfilter.='
'; + } + if (! empty($moreforfilter)) { print '
'; @@ -174,10 +205,11 @@ if ($resql) //print_liste_field_titre($langs->trans("DateCreation"), $_SERVER["PHP_SELF"], "c.datec","","$param",'align="center"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("DateContract"), $_SERVER["PHP_SELF"], "c.date_contrat","","$param",'align="center"',$sortfield,$sortorder); //print_liste_field_titre($langs->trans("Status"), $_SERVER["PHP_SELF"], "c.statut","","$param",'align="center"',$sortfield,$sortorder); - print '
'.$staticcontratligne->LibStatut(0,3).''.$staticcontratligne->LibStatut(4,3,0).''.$staticcontratligne->LibStatut(4,3,1).''.$staticcontratligne->LibStatut(5,3).'
  '; + print ''; print ''; print "
'.($obj->nb_running>0?$obj->nb_running:'').''.($obj->nb_expired>0?$obj->nb_expired:'').''.($obj->nb_closed>0 ?$obj->nb_closed:'').'
'; + print '
'; print ''; print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"c.rowid","",$option,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$option,'',$sortfield,$sortorder); diff --git a/htdocs/product/stats/commande_fournisseur.php b/htdocs/product/stats/commande_fournisseur.php index e7a803c299c..3d117a7f40a 100644 --- a/htdocs/product/stats/commande_fournisseur.php +++ b/htdocs/product/stats/commande_fournisseur.php @@ -198,7 +198,8 @@ if ($id > 0 || ! empty($ref)) { } print_barre_liste($langs->trans("SuppliersOrders"), $page, $_SERVER["PHP_SELF"], "&id=$product->id", $sortfield, $sortorder, '', $num, $totalrecords, ''); - print '
'; + print '
'; + print '
'; print $langs->trans('Period') . ' (' . $langs->trans("OrderDate") . ') - '; print $langs->trans('Month') . ': '; print $langs->trans('Year') . ':' . $formother->selectyear($search_year ? $search_year : - 1, 'search_year', 1, 20, 5); @@ -207,9 +208,10 @@ if ($id > 0 || ! empty($ref)) { print ''; print '
'; print '
'; + print '
'; $i = 0; - print '
'; + print '
'; print ''; print_liste_field_titre($langs->trans("Ref"), $_SERVER["PHP_SELF"], "c.rowid", "", $option, '', $sortfield, $sortorder); print_liste_field_titre($langs->trans("Company"), $_SERVER["PHP_SELF"], "s.nom", "", $option, '', $sortfield, $sortorder); diff --git a/htdocs/product/stats/contrat.php b/htdocs/product/stats/contrat.php index 84417c013b7..9d4d7d53abc 100644 --- a/htdocs/product/stats/contrat.php +++ b/htdocs/product/stats/contrat.php @@ -147,7 +147,7 @@ if ($id > 0 || ! empty($ref)) print_barre_liste($langs->trans("Contrats"),$page,$_SERVER["PHP_SELF"],"&id=$product->id",$sortfield,$sortorder,'',$num,0,''); $i = 0; - print "
"; + print '
'; print ''; print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"c.rowid","","&id=".$product->id,'',$sortfield,$sortorder); @@ -155,9 +155,9 @@ if ($id > 0 || ! empty($ref)) print_liste_field_titre($langs->trans("CustomerCode"),$_SERVER["PHP_SELF"],"s.code_client","","&id=".$product->id,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Date"),$_SERVER["PHP_SELF"],"c.date_contrat","","&id=".$product->id,'align="center"',$sortfield,$sortorder); //print_liste_field_titre($langs->trans("AmountHT"),$_SERVER["PHP_SELF"],"c.amount","","&id=".$product->id,'align="right"',$sortfield,$sortorder); - print ''; - print ''; - print ''; + print_liste_field_titre($staticcontratligne->LibStatut(0,3),$_SERVER["PHP_SELF"],"",'','','width="16"',$sortfield,$sortorder,'maxwidthsearch '); + print_liste_field_titre($staticcontratligne->LibStatut(4,3),$_SERVER["PHP_SELF"],"",'','','width="16"',$sortfield,$sortorder,'maxwidthsearch '); + print_liste_field_titre($staticcontratligne->LibStatut(5,3),$_SERVER["PHP_SELF"],"",'','','width="16"',$sortfield,$sortorder,'maxwidthsearch '); print "\n"; $contratstatic=new Contrat($db); diff --git a/htdocs/product/stats/facture.php b/htdocs/product/stats/facture.php index 2a79b97e399..6fb09bffa8b 100644 --- a/htdocs/product/stats/facture.php +++ b/htdocs/product/stats/facture.php @@ -22,7 +22,7 @@ /** * \file htdocs/product/stats/facture.php * \ingroup product service facture - * \brief Page des stats des factures clients pour un produit + * \brief Page of invoice statistics for a product */ require '../../main.inc.php'; @@ -128,7 +128,8 @@ if ($id > 0 || ! empty($ref)) print ''; - if ($user->rights->facture->lire) { + if ($user->rights->facture->lire) + { $sql = "SELECT distinct s.nom as name, s.rowid as socid, s.code_client,"; $sql.= " f.facnumber, d.total_ht as total_ht,"; $sql.= " f.datef, f.paye, f.fk_statut as statut, f.rowid as facid, d.qty"; @@ -189,7 +190,8 @@ if ($id > 0 || ! empty($ref)) } print_barre_liste($langs->trans("CustomersInvoices"),$page,$_SERVER["PHP_SELF"],"&id=".$product->id,$sortfield,$sortorder,'',$num,$totalrecords,''); - print '
'; + print '
'; + print '
'; print $langs->trans('Period').' ('.$langs->trans("DateInvoice") .') - '; print $langs->trans('Month') . ': '; print $langs->trans('Year') . ':' . $formother->selectyear($search_year ? $search_year : - 1, 'search_year', 1, 20, 5); @@ -198,9 +200,10 @@ if ($id > 0 || ! empty($ref)) print ''; print '
'; print '
'; + print '
'; $i = 0; - print '
'.$staticcontratligne->LibStatut(0,3).''.$staticcontratligne->LibStatut(4,3).''.$staticcontratligne->LibStatut(5,3).'
'; + print '
'; print ''; print_liste_field_titre($langs->trans("Ref"),$_SERVER["PHP_SELF"],"s.rowid","",$option,'',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Company"),$_SERVER["PHP_SELF"],"s.nom","",$option,'',$sortfield,$sortorder); diff --git a/htdocs/product/stats/facture_fournisseur.php b/htdocs/product/stats/facture_fournisseur.php index 9b56cee7552..677bff934a7 100644 --- a/htdocs/product/stats/facture_fournisseur.php +++ b/htdocs/product/stats/facture_fournisseur.php @@ -190,7 +190,8 @@ if ($id > 0 || ! empty($ref)) } print_barre_liste($langs->trans("SuppliersInvoices"), $page, $_SERVER["PHP_SELF"], "&id=$product->id", $sortfield, $sortorder, '', $num, $totalrecords, ''); - print '
'; + print '
'; + print '
'; print $langs->trans('Period') . ' (' . $langs->trans("DateInvoice") . ') - '; print $langs->trans('Month') . ': '; print $langs->trans('Year') . ':' . $formother->selectyear($search_year ? $search_year : - 1, 'search_year', 1, 20, 5); @@ -199,9 +200,10 @@ if ($id > 0 || ! empty($ref)) print ''; print '
'; print '
'; + print '
'; $i = 0; - print '
'; + print '
'; print ''; print_liste_field_titre($langs->trans("Ref"), $_SERVER["PHP_SELF"], "s.rowid", "", $option, '', $sortfield, $sortorder); print_liste_field_titre($langs->trans("Company"), $_SERVER["PHP_SELF"], "s.nom", "", $option, '', $sortfield, $sortorder); diff --git a/htdocs/product/stats/propal.php b/htdocs/product/stats/propal.php index 690f9c8c421..295487344fd 100644 --- a/htdocs/product/stats/propal.php +++ b/htdocs/product/stats/propal.php @@ -191,7 +191,8 @@ if ($id > 0 || ! empty($ref)) } print_barre_liste($langs->trans("Proposals"), $page, $_SERVER["PHP_SELF"], "&id=$product->id", $sortfield, $sortorder, '', $num, $totalrecords, ''); - print '
'; + print '
'; + print '
'; print $langs->trans('Period') . ' (' . $langs->trans("DatePropal") . ') - '; print $langs->trans('Month') . ': '; print $langs->trans('Year') . ':' . $formother->selectyear($search_year ? $search_year : - 1, 'search_year', 1, 20, 5); @@ -200,9 +201,10 @@ if ($id > 0 || ! empty($ref)) print ''; print '
'; print '
'; + print '
'; $i = 0; - print '
'; + print '
'; print ''; print_liste_field_titre($langs->trans("Ref"), $_SERVER["PHP_SELF"], "p.rowid", "", $option, '', $sortfield, $sortorder); print_liste_field_titre($langs->trans("Company"), $_SERVER["PHP_SELF"], "s.nom", "", $option, '', $sortfield, $sortorder); diff --git a/htdocs/projet/stats/index.php b/htdocs/projet/stats/index.php index 42d367ce833..d28d7d6f14a 100644 --- a/htdocs/projet/stats/index.php +++ b/htdocs/projet/stats/index.php @@ -269,7 +269,8 @@ dol_fiche_head($head,'byyear',$langs->trans("Statistics"), 0, ''); print '
'; print ''; -print '
'; + +print '
'; print ''; // Company print '
'.$langs->trans("Filter").'
'.$langs->trans("ThirdParty").''; @@ -293,8 +294,8 @@ print '
'; print ''; print '

'; -print ''; -print ''; +print '
'; +print ''; print ''; print ''; if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) @@ -305,13 +306,15 @@ if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) print ''; $oldyear=0; +$var=true; foreach ($data_all_year as $val) { $year = $val['year']; while ($year && $oldyear > $year+1) { // If we have empty year $oldyear--; - print ''; + $var=!$var; + print ''; print ''; if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) { @@ -321,7 +324,8 @@ foreach ($data_all_year as $val) print ''; print ''; } - print ''; + $var=!$var; + print ''; print ''; print ''; if (! empty($conf->global->PROJECT_USE_OPPORTUNITIES)) diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 62707beec64..5a163d0bbd2 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -1562,9 +1562,11 @@ a.tab:link, a.tab:visited, a.tab:hover, a.tab#active { -webkit-box-shadow: 0 -1px 4px rgba(0,0,0,.1); box-shadow: 0 -1px 4px rgba(0,0,0,.1); margin-bottom: 0 0.2em 0 0.2em !important; + border-right: 1px solid #AAA !important; border-left: 1px solid #AAA !important; border-top: 1px solid #BBB !important; + -moz-border-radius:4px 4px 0 0; -webkit-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; @@ -1897,7 +1899,9 @@ table.border, table.dataTable, .table-border, .table-border-col, .table-key-bord border-collapse: collapse !important; padding: 1px 2px 1px 3px; /* t r b l */ } - +table.borderplus { + border: 1px solid #BBB; +} .border tbody tr, .border tbody tr td { height: 20px; } @@ -2374,6 +2378,10 @@ div.tabBar .noborder { box-shadow: 0px 0px 0px #DDD !important; } +#tablelines tr.liste_titre td, .paymenttable tr.liste_titre td, .margintable tr.liste_titre td, .tableforservicepart1 tr.liste_titre td { + border-bottom: 1px solid #AAA !important; +} + /* * Boxes @@ -3535,6 +3543,7 @@ dl.dropdown { } .dropdown dd ul li { white-space: nowrap; + font-weight: normal; } .dropdown dd ul li a { padding:5px; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 336505215b5..4210804ce7d 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -251,6 +251,7 @@ input, textarea, select { border:solid 1px rgba(0,0,0,.3); border-top:solid 1px rgba(0,0,0,.3); border-bottom:solid 1px rgba(0,0,0,.2); + background-color: #FFF; /* box-shadow: 1px 1px 1px rgba(0,0,0,.2) inset;*/ padding:4px; margin-left:1px; @@ -1555,9 +1556,9 @@ a.tab:link, a.tab:visited, a.tab:hover, a.tab#active { -webkit-box-shadow: 0 -1px 4px rgba(0,0,0,.1); box-shadow: 0 -1px 4px rgba(0,0,0,.1); - border-right: 1px solid #CCCCCC; - border-left: 1px solid #f4f4f4; - border-top: 1px solid #D8D8D8; + border-right: 1px solid #AAA !important; + border-left: 1px solid #AAA !important; + border-top: 1px solid #BBB !important; -moz-border-radius:3px 3px 0px 0px; -webkit-border-radius:3px 3px 0px 0px; @@ -2243,6 +2244,10 @@ div.tabBar .noborder { box-shadow: 0px 0px 0px #f4f4f4 !important; } +#tablelines tr.liste_titre td, .paymenttable tr.liste_titre td, .margintable tr.liste_titre td, .tableforservicepart1 tr.liste_titre td { + border-bottom: 1px solid #AAA !important; +} + /* * Boxes @@ -3407,6 +3412,7 @@ dl.dropdown { } .dropdown dd ul li { white-space: nowrap; + font-weight: normal; } .dropdown dd ul li a { padding:5px; From effba68511eb34dc8067c41f96366cc5865dcd12 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 10 Oct 2015 01:51:12 +0200 Subject: [PATCH 28/51] Start to work on a common banner for tabs (goal is to have a nicer and generic part for all element) --- htdocs/core/class/commonobject.class.php | 74 +++++++++++++++++++++ htdocs/core/class/html.form.class.php | 44 +++++++------ htdocs/core/lib/company.lib.php | 46 ++++--------- htdocs/core/lib/functions.lib.php | 39 +++++++---- htdocs/societe/soc.php | 84 +++++++++++++++++------- htdocs/theme/eldy/style.css.php | 44 ++++++++++++- 6 files changed, 235 insertions(+), 96 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index bfa1595197e..76fd73a324d 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -434,6 +434,80 @@ abstract class CommonObject } + /** + * Return full address of contact + * + * @param Societe $object Object Societe or null + * @return string Full address string + */ + function getBannerAddress($htmlkey, $object=null) + { + global $conf, $langs; + + $countriesusingstate=array('AU','US','IN','GB','ES','UK','TR'); + + $out=''; + + $out.=''; + + $outdone=0; + $coords = $this->getFullAddress(1,', '); + if (! empty($conf->use_javascript_ajax)) + { + $namecoords = $this->getFullName($langs,1).'
'.$coords; + // hideonsmatphone because copyToClipboard call jquery dialog that does not work with jmobile + $out.=''; + $out.=img_picto($langs->trans("Address"), 'object_address.png'); + $out.=' '; + } + if ($coords) { + $out.=dol_print_address($coords, 'address_'.$htmlkey.'_'.$this->id, $this->element, $this->id, 1); $outdone++; + $outdone++; + } + + if (! in_array($object->country_code,$countriesusingstate) && empty($conf->global->MAIN_FORCE_STATE_INTO_ADDRESS) + && ! empty($conf->global->SOCIETE_DISABLE_STATE) && $this->state) + { + $out.=($outdone?'
':'').$this->state; + $outdone++; + } + + if ($this->phone_pro || $this->phone_mobile || $this->phone_perso || $this->fax) $out.=($outdone?'
':''); + if ($this->phone_pro) { + $out.=dol_print_phone($this->phone_pro,$country_code['code'],$this->rowid,$object->id,'AC_TEL',' ','phone'); $outdone++; + } + if ($this->phone_mobile) { + $out.=dol_print_phone($this->phone_mobile,$country_code['code'],$this->rowid,$object->id,'AC_TEL',' ','phone'); $outdone++; + } + if ($this->phone_perso) { + $out.=dol_print_phone($this->phone_perso,$country_code['code'],$this->rowid,$object->id,'AC_TEL',' ','phone'); $outdone++; + } + if ($this->fax) { + $out.=dol_print_phone($this->fax,$country_code['code'],$this->rowid,$object->id,'AC_FAX',' ','fax'); $outdone++; + } + + $out.='
'; + $outdone=0; + if ($this->email) + { + $out.=dol_print_email($this->email,$this->id,$object->id,'AC_EMAIL',0,0,1); + $outdone++; + } + if ($this->url) + { + $out.=dol_print_url($this->url,'',0,1); + $outdone++; + } + if (! empty($conf->skype->enabled)) + { + if ($this->skype) $out.=($outdone?'
':'').dol_print_skype($this->skype,$this->id,$object->id,'AC_SKYPE'); + } + + $out.=''; + + return $out; + } + /** * Add a link between element $this->element and a contact * diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 0d4bff05d42..8cc9eaa09a0 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5042,16 +5042,18 @@ class Form * @param int $shownav Show Condition (navigation is shown if value is 1) * @param string $fieldid Nom du champ en base a utiliser pour select next et previous (we make the select max and min on this field) * @param string $fieldref Nom du champ objet ref (object->ref) a utiliser pour select next et previous - * @param string $morehtmlref Code html supplementaire a afficher apres ref + * @param string $morehtmlref More html to show after ref * @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 * @return string Portion HTML avec ref + boutons nav */ - function showrefnav($object,$paramid,$morehtml='',$shownav=1,$fieldid='rowid',$fieldref='ref',$morehtmlref='',$moreparam='',$nodbprefix=0) + function showrefnav($object,$paramid,$morehtml='',$shownav=1,$fieldid='rowid',$fieldref='ref',$morehtmlref='',$moreparam='',$nodbprefix=0,$morehtmlleft='',$morehtmlright='') { global $langs,$conf; - $ret=''; + $ret=''; if (empty($fieldid)) $fieldid='rowid'; if (empty($fieldref)) $fieldref='ref'; @@ -5064,14 +5066,18 @@ class Form $next_ref = $object->ref_next?''.(empty($conf->dol_use_jmobile)?'>':' ').'':''; //print "xx".$previous_ref."x".$next_ref; - $ret.='
'; + $ret.='
'; + + $ret.='
'.$morehtmlleft.'
'; + + $ret.='
'; $ret.=dol_htmlentities($object->$fieldref); if ($morehtmlref) { $ret.=' '.$morehtmlref; } - $ret.='
'; + $ret.='
'; if ($previous_ref || $next_ref || $morehtml) { @@ -5079,23 +5085,20 @@ class Form } if ($morehtml) { - //$ret.='
'; - //$ret.='
'.$langs->trans("Year").''.$langs->trans("NbOfProjects").'
0?'&userid='.$userid:'').'">'.$oldyear.'0
0?'&userid='.$userid:'').'">'.$year.''.$val['nb'].''.$morehtml; $ret.='
  • '.$morehtml.'
  • '; } if ($shownav && ($previous_ref || $next_ref)) { - //$ret.='
    '.$previous_ref.''.$next_ref; $ret.=''; $ret.=''; } if ($previous_ref || $next_ref || $morehtml) { - //$ret.='
    '; $ret.='
    '; } - $ret.='
    '; - + $ret.='
    '.$morehtmlright.'
    '; + $ret.=''; + return $ret; } @@ -5132,15 +5135,16 @@ class Form /** * Return HTML code to output a photo * - * @param string $modulepart Key to define module concerned ('societe', 'userphoto', 'memberphoto') - * @param object $object Object containing data to retrieve file name - * @param int $width Width of photo - * @param int $height Height of photo (auto if 0) - * @param int $caneditfield Add edit fields - * @param string $cssclass CSS name to use on img for photo - * @return string HTML code to output photo + * @param string $modulepart Key to define module concerned ('societe', 'userphoto', 'memberphoto') + * @param object $object Object containing data to retrieve file name + * @param int $width Width of photo + * @param int $height Height of photo (auto if 0) + * @param int $caneditfield Add edit fields + * @param string $cssclass CSS name to use on img for photo + * @param int $genericifundef Use a generic image if no image avaiable + * @return string HTML code to output photo */ - static function showphoto($modulepart, $object, $width=100, $height=0, $caneditfield=0, $cssclass='photowithmargin') + static function showphoto($modulepart, $object, $width=100, $height=0, $caneditfield=0, $cssclass='photowithmargin', $genericifundef=0) { global $conf,$langs; @@ -5199,7 +5203,7 @@ class Form else { $nophoto='/public/theme/common/nophoto.jpg'; - if (in_array($modulepart,array('userphoto','contact'))) // For module thar are "physical" users + if (in_array($modulepart,array('userphoto','contact'))) // For module that are "physical" users { $nophoto='/public/theme/common/user_anonymous.png'; if ($object->gender == 'man') $nophoto='/public/theme/common/user_man.png'; diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index 9a67065fe64..aba18765777 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -689,10 +689,9 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='') { $obj = $db->fetch_object($result); $var = !$var; - print "
    '; + $contactstatic->id = $obj->rowid; + $contactstatic->ref = $obj->ref; $contactstatic->statut = $obj->statut; $contactstatic->lastname = $obj->lastname; $contactstatic->firstname = $obj->firstname; @@ -705,44 +704,23 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='') $contactstatic->phone_mobile = $obj->phone_mobile; $contactstatic->phone_perso = $obj->phone_perso; $contactstatic->email = $obj->email; + $contactstatic->web = $obj->web; + $contactstatic->skype = $obj->skype; + + $country_code = getCountry($obj->country_id, 'all'); + $contactstatic->country_code = $country_code; + + print "
    '; print $contactstatic->getNomUrl(1,'',0,'&backtopage='.urlencode($backtopage)); print ''; if ($obj->poste) print $obj->poste; print ''; - $outdone=0; - $contactstatic->address = $obj->address; - $contactstatic->zip = $obj->zip; - $contactstatic->town = $obj->town; - $contactstatic->country_id = $obj->country_id; - $coords = $contactstatic->getFullAddress(1,', '); - if (! empty($conf->use_javascript_ajax)) - { - $namecoords = $contactstatic->getFullName($langs,1).'
    '.$coords; - // hideonsmatphone because copyToClipboard call jquery dialog that does not work with jmobile - print ''; - print img_picto($langs->trans("Address"), 'object_address.png'); - print ' '; - } - if ($coords) { print dol_print_address($coords,'address_contact_'.$obj->rowid, 'contact', $obj->rowid); $outdone++; } - - if ($obj->phone_pro || $obj->phone_mobile || $obj->phone_perso || $obj->fax) print ($outdone?'
    ':''); - if ($obj->phone_pro) { print dol_print_phone($obj->phone_pro,$country_code['code'],$obj->rowid,$object->id,'AC_TEL',' ','phone'); $outdone++; } - if ($obj->phone_mobile) { print dol_print_phone($obj->phone_mobile,$country_code['code'],$obj->rowid,$object->id,'AC_TEL',' ','phone'); $outdone++; } - if ($obj->phone_perso) { print dol_print_phone($obj->phone_perso,$country_code['code'],$obj->rowid,$object->id,'AC_TEL',' ','phone'); $outdone++; } - if ($obj->fax) { print dol_print_phone($obj->fax,$country_code['code'],$obj->rowid,$object->id,'AC_FAX',' ','fax'); $outdone++; } - - print '
    '; - $outdone=0; - if ($obj->email) print dol_print_email($obj->email,$obj->rowid,$object->id,'AC_EMAIL',0,0,1); - if (! empty($conf->skype->enabled)) - { - if ($obj->skype) print ($outdone?'
    ':'').dol_print_skype($obj->skype,$obj->rowid,$object->id,'AC_SKYPE'); - } + print $contactstatic->getBannerAddress('contact', $object); print '
    '.fieldLabel('Capital','capital').''.$langs->trans("Currency".$conf->currency).'
    '.$langs->trans("Currency".$conf->currency).'
    '; // Ref @@ -1879,18 +1899,21 @@ else */ // Name + /* print ''; print ''; print ''; - + */ + // Alias names (commercial, trademark or alias names) - print '"; // Logo+barcode + /* $rowspan=6; if (! empty($conf->global->SOCIETE_USEPREFIX)) $rowspan++; if (! empty($object->client)) $rowspan++; @@ -1905,12 +1928,12 @@ else if ($showlogo && $showbarcode) $htmllogobar.='

    '; if ($showbarcode) $htmllogobar.=$form->showbarcode($object); $htmllogobar.=''; - } + }*/ // Prefix if (! empty($conf->global->SOCIETE_USEPREFIX)) // Old not used prefix field { - print ''; + print ''; print $htmllogobar; $htmllogobar=''; print ''; } @@ -1919,7 +1942,7 @@ else if ($object->client) { print ''; @@ -1931,7 +1954,7 @@ else if (! empty($conf->fournisseur->enabled) && $object->fournisseur && ! empty($user->rights->fournisseur->lire)) { print ''; @@ -1943,13 +1966,16 @@ else if (! empty($conf->barcode->enabled)) { print ''; - print $htmllogobar; $htmllogobar=''; + if ($htmllogobar) $htmllogobar.=$form->showbarcode($object); + print $htmllogobar; + $htmllogobar=''; print ''; } // Status + /* print ''; print ''; print $htmllogobar; $htmllogobar=''; print ''; - + */ + // Address + /* print ''; @@ -2007,7 +2035,8 @@ else // Phone / Fax print ''; print ''; - + */ + // Prof ids $i=1; $j=0; while ($i <= 6) @@ -2015,8 +2044,9 @@ else $idprof=$langs->transcountry('ProfId'.$i,$object->country_code); if ($idprof!='-') { - if (($j % 2) == 0) print ''; - print ''; + print ''; + print ''; - if (($j % 2) == 1) print ''; + //if (($j % 2) == 1) print ''; + print ''; $j++; } $i++; } - if ($j % 2 == 1) print ''; + //if ($j % 2 == 1) print ''; // VAT payers print ''; - + print ''; + // VAT Code - print ''; + print ''; @@ -2177,13 +2210,14 @@ else // Type + Staff $arr = $formcompany->typent_array(1); $object->typent= $arr[$object->typent_code]; - print ''; + print ''; + print ''; // Legal - print ''; + print ''; // Capital - print ''; @@ -2192,7 +2226,7 @@ else if (! empty($conf->global->MAIN_MULTILANGS)) { require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; - print ''; - print '"; } @@ -2215,7 +2249,7 @@ else // Supplier if ($object->fournisseur) { print ''; - print '"; } diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index b6987ed42cc..d768f446a0d 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -604,6 +604,38 @@ div.attacharea { padding-bottom: 10px; } +div.arearef { + /*border-bottom: 1px solid #bbb;*/ + padding-top: 2px; + padding-bottom: 5px; + /*padding-right: 3px; + padding-left: 2px;*/ + margin-bottom: 10px; +} +div.heightref { + min-height: 74px; +} +div.divphotoref { + padding-right: 10px; +} +div.statusref { + float: right; + padding-right: 12px; + margin-top: 9px; + margin-bottom: 10px; +} +img.photoref { + height: 68px; + width: 68px; + border: 1px solid #CCC; + -moz-box-shadow: 3px 3px 4px #DDD; + -webkit-box-shadow: 3px 3px 4px #DDD; + box-shadow: 3px 3px 4px #DDD; +} +.underrefbanner { + border-bottom: 2px solid #888; +} + /* ============================================================================== */ /* Menu top et 1ere ligne tableau */ /* ============================================================================== */ @@ -2051,13 +2083,19 @@ table.liste td { /* Pagination */ div.refidpadding { - padding-top: dol_use_jmobile)?'8':'12'; ?>px; + /* padding-top: dol_use_jmobile)?'8':'12'; ?>px; */ } div.refid { - padding-top: dol_use_jmobile)?'5':'12'; ?>px; + /* padding-top: dol_use_jmobile)?'5':'12'; ?>px; */ font-weight: bold; color: #766; - font-size: 120%; + font-size: 160%; +} +div.refidno { + padding-top: 2px; + font-weight: normal; + color: #444; + font-size: px; } div.pagination { From d7dbc8adb144124aa5e229d66ab58f455581d5e7 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 10 Oct 2015 02:16:49 +0200 Subject: [PATCH 29/51] Sync theme md --- htdocs/theme/md/style.css.php | 44 ++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 65c65bdfd98..9fb050b0ef7 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -656,6 +656,38 @@ div.attacharea { padding-top: 10px; padding-bottom: 10px; } +div.arearef { + /*border-bottom: 1px solid #bbb;*/ + padding-top: 2px; + padding-bottom: 5px; + /*padding-right: 3px; + padding-left: 2px;*/ + margin-bottom: 10px; +} +div.heightref { + min-height: 74px; +} +div.divphotoref { + padding-right: 10px; +} +div.statusref { + float: right; + padding-right: 12px; + margin-top: 9px; + margin-bottom: 10px; +} +img.photoref { + height: 68px; + width: 68px; + border: 1px solid #CCC; + -moz-box-shadow: 3px 3px 4px #DDD; + -webkit-box-shadow: 3px 3px 4px #DDD; + box-shadow: 3px 3px 4px #DDD; +} +.underrefbanner { + border-bottom: 2px solid #888; +} + /* ============================================================================== */ @@ -1902,13 +1934,19 @@ table.listwithfilterbefore { /* Pagination */ div.refidpadding { - padding-top: dol_use_jmobile)?'8':'12'; ?>px; + /* padding-top: dol_use_jmobile)?'8':'12'; ?>px; */ } div.refid { - padding-top: dol_use_jmobile)?'5':'12'; ?>px; + /* padding-top: dol_use_jmobile)?'5':'12'; ?>px; */ font-weight: bold; color: #766; - font-size: 120%; + font-size: 160%; +} +div.refidno { + padding-top: 2px; + font-weight: normal; + color: #444; + font-size: px; } div.pagination { From 0222867a9479450391c69fab9d1e652e4c02fe00 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 10 Oct 2015 12:01:09 +0200 Subject: [PATCH 30/51] The new banner for tab is moved into a shared functions --- htdocs/core/lib/functions.lib.php | 44 +++++++++++++++++++++++++++++++ htdocs/societe/soc.php | 26 +++--------------- htdocs/theme/eldy/style.css.php | 11 ++++---- htdocs/theme/md/style.css.php | 15 +++++------ 4 files changed, 59 insertions(+), 37 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 7f4a1b8d855..a319b193662 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -840,6 +840,50 @@ function dol_get_fiche_end($notab=0) else return ''; } +/** + * Show tab footer of a card + * + * @param object $object Object to show + * @param string $paramid Name of parameter to use to name the id into the URL link + * @param string $morehtml More html content to output just before the nav bar + * @param int $shownav Show Condition (navigation is shown if value is 1) + * @param string $fieldid Nom du champ en base a utiliser pour select next et previous (we make the select max and min on this field) + * @param string $fieldref Nom du champ objet ref (object->ref) a utiliser pour select next et previous + * @param string $morehtmlref More html to show after ref + * @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 + * @return void + */ +function dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlright='') +{ + global $conf, $form, $user; + + //$showlogo=$object->logo; + $showlogo=1; + $showbarcode=empty($conf->barcode->enabled)?0:1; + if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) $showbarcode=0; + + print '
    '; + //$morehtmlleft='
    '.img_picto('', 'title_companies', '', '').'
    '; + if ($showlogo) $morehtmlleft.='
    '.$form->showphoto('societe',$object,0,0,0,'photoref').'
    '; + //if ($showlogo) $morehtmlleft.='
    '.$form->showphoto('societe',$object,0,0,0,'photoref').'
    '; + if ($showbarcode) $morehtmlleft.='
    '.$form->showbarcode($object).'
    '; + if (! empty($conf->use_javascript_ajax) && $user->rights->societe->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { + $morehtmlright.=ajax_object_onoff($object, 'status', 'status', 'InActivity', 'ActivityCeased'); + } else { + $morehtmlright.=$object->getLibStatut(2); + } + if (! empty($object->name_nalias)) $morehtmlref.='
    '.$object->name_alias.'
    '; + $morehtmlref.='
    '; + $morehtmlref.=$object->getBannerAddress('refaddress',$object); + $morehtmlref.='
    '; + print $form->showrefnav($object, $paramid, $morehtml, $shownav, $fieldid, $fieldref, $morehtmlref, $moreparam, $nodbprefix, $morehtmlleft, $morehtmlright); + print '
    '; + print '
    '; +} + /** * Show a string with the label tag dedicated to the HTML edit field. * diff --git a/htdocs/societe/soc.php b/htdocs/societe/soc.php index aad1a8aae48..04fe5336d7e 100644 --- a/htdocs/societe/soc.php +++ b/htdocs/societe/soc.php @@ -1863,29 +1863,9 @@ else dol_htmloutput_errors($error,$errors); - //$showlogo=$object->logo; - $showlogo=1; - $showbarcode=empty($conf->barcode->enabled)?0:1; - if (! empty($conf->global->MAIN_USE_ADVANCED_PERMS) && empty($user->rights->barcode->lire_advance)) $showbarcode=0; - - print '
    '; - //$morehtmlleft='
    '.img_picto('', 'title_companies', '', '').'
    '; - if ($showlogo) $morehtmlleft.='
    '.$form->showphoto('societe',$object,0,0,0,'photoref').'
    '; - //if ($showlogo) $morehtmlleft.='
    '.$form->showphoto('societe',$object,0,0,0,'photoref').'
    '; - if ($showbarcode) $morehtmlleft.='
    '.$form->showbarcode($object).'
    '; - if (! empty($conf->use_javascript_ajax) && $user->rights->societe->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { - $morehtmlright.=ajax_object_onoff($object, 'status', 'status', 'InActivity', 'ActivityCeased'); - } else { - $morehtmlright.=$object->getLibStatut(2); - } - $morehtml=''; - if (! empty($object->ame_nalias)) $morehtml.='
    '.$object->name_alias.'
    '; - $morehtml.='
    '; - $morehtml.=$object->getBannerAddress('refaddress',$object); - $morehtml.='
    '; - print $form->showrefnav($object, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom', $morehtml, '', 0, $morehtmlleft, $morehtmlright); - print '
    '; - print '
    '; + + dol_banner_tab($object, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom'); + print '
    '.$langs->trans('ThirdPartyName').''; print $form->showrefnav($object, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom'); print '
    '.$langs->trans('AliasNames').''; + print '
    '.$langs->trans('AliasNames').''; print $object->name_alias; print "
    '.$langs->trans('Prefix').''.$object->prefix_comm.'
    '.$langs->trans('Prefix').''.$object->prefix_comm.'
    '; - print $langs->trans('CustomerCode').''; + print $langs->trans('CustomerCode').''; print $object->code_client; if ($object->check_codeclient() <> 0) print ' ('.$langs->trans("WrongCustomerCode").')'; print '
    '; - print $langs->trans('SupplierCode').''; + print $langs->trans('SupplierCode').''; print $object->code_fournisseur; if ($object->check_codefournisseur() <> 0) print ' ('.$langs->trans("WrongSupplierCode").')'; print '
    '; - print $langs->trans('Gencod').''.$object->barcode; + print $langs->trans('Gencod').''.$object->barcode; print '
    '.$langs->trans("Status").''; if (! empty($conf->use_javascript_ajax) && $user->rights->societe->creer && ! empty($conf->global->MAIN_DIRECT_STATUS_UPDATE)) { @@ -1960,8 +1986,10 @@ else print '
    '.$langs->trans('Address').''; dol_print_address($object->address,'gmap','thirdparty',$object->id); print '
    '.$langs->trans('Phone').''.dol_print_phone($object->phone,$object->country_code,0,$object->id,'AC_TEL').''.$langs->trans('Fax').''.dol_print_phone($object->fax,$object->country_code,0,$object->id,'AC_FAX').'
    '.$idprof.''; + //if (($j % 2) == 0) print '
    '.$idprof.''; $key='idprof'.$i; print $object->$key; if ($object->$key) @@ -2025,12 +2055,13 @@ else else print ' ('.$langs->trans("ErrorWrongValue").')'; } print '
    '; @@ -2038,9 +2069,11 @@ else print ''; print yn($object->tva_assuj); print '
    '.$langs->trans('VATIntra').''; + print '
    '.$langs->trans('VATIntra').''; if ($object->tva_intra) { $s=''; @@ -2083,7 +2116,7 @@ else { print '
    '.$langs->transcountry("LocalTax1IsUsed",$mysoc->country_code).''; print yn($object->localtax1_assuj); - print ''.$langs->transcountry("LocalTax2IsUsed",$mysoc->country_code).''; + print '
    '.$langs->transcountry("LocalTax2IsUsed",$mysoc->country_code).''; print yn($object->localtax2_assuj); print '
    '.$langs->trans("ThirdPartyType").''.$object->typent.''.$langs->trans("Staff").''.$object->effectif.'
    '.$langs->trans("ThirdPartyType").''.$object->typent.'
    '.$langs->trans("Staff").''.$object->effectif.'
    '.$langs->trans('JuridicalStatus').''.$object->forme_juridique.'
    '.$langs->trans('JuridicalStatus').''.$object->forme_juridique.'
    '.$langs->trans('Capital').''; + print '
    '.$langs->trans('Capital').''; if ($object->capital) print price($object->capital,'',$langs,0,-1,-1, $conf->currency); else print ' '; print '
    '.$langs->trans("DefaultLang").''; + print '
    '.$langs->trans("DefaultLang").''; //$s=picto_from_langcode($object->default_lang); //print ($s?$s.' ':''); $langs->load("languages"); @@ -2207,7 +2241,7 @@ else // Customer if ($object->prospect || $object->client) { print '
    ' . $langs->trans("CustomersCategoriesShort") . ''; + print ''; print $form->showCategories($object->id, 'customer', 1); print "
    ' . $langs->trans("SuppliersCategoriesShort") . ''; + print ''; print $form->showCategories($object->id, 'supplier', 1); print "
    '; diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 98713d0a77a..b1906a344b1 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -1528,10 +1528,10 @@ div.tabsElem { div.tabBar { color: #; - padding-top: px; - padding-left: px; - padding-right: px; - padding-bottom: px; + padding-top: px; + padding-left: px; + padding-right: px; + padding-bottom: px; margin: 0px 0px 14px 0px; -moz-border-radius:4px; -webkit-border-radius: 4px; @@ -2064,10 +2064,9 @@ table.listwithfilterbefore { /* Pagination */ div.refidpadding { - /* padding-top: dol_use_jmobile)?'8':'12'; ?>px; */ + padding-top: dol_use_jmobile)?'3':'14'; ?>px; } div.refid { - /* padding-top: dol_use_jmobile)?'5':'12'; ?>px; */ font-weight: bold; color: #766; font-size: 160%; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index 9fb050b0ef7..f909915d794 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -677,8 +677,8 @@ div.statusref { margin-bottom: 10px; } img.photoref { - height: 68px; - width: 68px; + height: 80px; + width: 80px; border: 1px solid #CCC; -moz-box-shadow: 3px 3px 4px #DDD; -webkit-box-shadow: 3px 3px 4px #DDD; @@ -1513,10 +1513,10 @@ div.tabsElem { margin-top: 8px; } /* To avoid overlap of tabs when not browser div.tabBar { color: #; - padding-top: 9px; - padding-left: px; - padding-right: px; - padding-bottom: 8px; + padding-top: px; + padding-left: px; + padding-right: px; + padding-bottom: px; margin: 0px 0px 14px 0px; -moz-border-radius:3px; -webkit-border-radius: 3px; @@ -1934,10 +1934,9 @@ table.listwithfilterbefore { /* Pagination */ div.refidpadding { - /* padding-top: dol_use_jmobile)?'8':'12'; ?>px; */ + padding-top: dol_use_jmobile)?'3':'14'; ?>px; } div.refid { - /* padding-top: dol_use_jmobile)?'5':'12'; ?>px; */ font-weight: bold; color: #766; font-size: 160%; From 7065b2aa7deddb70211eda71e233b42dda62d249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20FRANCE?= Date: Sat, 10 Oct 2015 12:59:58 +0200 Subject: [PATCH 31/51] Update account.php --- htdocs/compta/bank/account.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/compta/bank/account.php b/htdocs/compta/bank/account.php index deed3b1b97a..9a04a431ac6 100644 --- a/htdocs/compta/bank/account.php +++ b/htdocs/compta/bank/account.php @@ -952,7 +952,7 @@ if ($id > 0 || ! empty($ref)) if ($sep > 0) print ' '; // If we had at least one line in future else print $langs->trans("CurrentBalance"); print ' '.$object->currency_code.''; - print ''; + print ''; print ''; print ''; } else { From 0032ad695c8d7fb435f4f4f9bb9c632996798238 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 10 Oct 2015 13:12:14 +0200 Subject: [PATCH 32/51] New look for thirdparty tab using the new common banner. End. Let's do the same for other tabs and elements now... --- htdocs/societe/soc.php | 17 ++++++++++++++++- htdocs/theme/eldy/style.css.php | 3 +++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/htdocs/societe/soc.php b/htdocs/societe/soc.php index 04fe5336d7e..9c8f4c90aa5 100644 --- a/htdocs/societe/soc.php +++ b/htdocs/societe/soc.php @@ -1867,7 +1867,11 @@ else dol_banner_tab($object, 'socid', '', ($user->societe_id?0:1), 'rowid', 'nom'); - print '
    '.price($solde, 0, $langs, 0, 0, -1, $object->currency_code).''.price($total, 0, $langs, 0, 0, -1, $object->currency_code).' 
    '; + print '
    '; + print '
    '; + + print '
    '; + print '
    '; // Ref /* @@ -2202,6 +2206,14 @@ else else print ' '; print ''; + print '
    '; + + print ''; + print '
    '; + + print '
    '; + print ''; + // Default language if (! empty($conf->global->MAIN_MULTILANGS)) { @@ -2338,6 +2350,9 @@ else print '
    '; + print '
    '; + print '
    '; + dol_fiche_end(); diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index b1906a344b1..ed6c1291ef5 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -637,9 +637,12 @@ img.photoref { object-fit: contain } .underrefbanner { +} +.underbanner { border-bottom: 2px solid #888; } + /* ============================================================================== */ /* Menu top et 1ere ligne tableau */ /* ============================================================================== */ From b6b410a99c32082b95b1b0bda013a0698ef0a970 Mon Sep 17 00:00:00 2001 From: Drosis Nikos Date: Sat, 10 Oct 2015 16:01:39 +0300 Subject: [PATCH 33/51] Update cidlookup.php --- htdocs/asterisk/cidlookup.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/asterisk/cidlookup.php b/htdocs/asterisk/cidlookup.php index 771b2e29979..e50a1a74a1b 100644 --- a/htdocs/asterisk/cidlookup.php +++ b/htdocs/asterisk/cidlookup.php @@ -30,7 +30,7 @@ include '../master.inc.php'; $phone = GETPOST('phone'); -$notfound = $phone; +$notfound = $langs->trans("Unknown"); // Security check if (empty($conf->clicktodial->enabled)) From fb50daaa40962bebd96f289b91471ef6c4dc784d Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 10 Oct 2015 16:09:01 +0200 Subject: [PATCH 34/51] Fix bad parameter --- htdocs/core/lib/company.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index d7fbaedfeba..565078a9d3b 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -706,7 +706,7 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='') $contactstatic->web = $obj->web; $contactstatic->skype = $obj->skype; - $country_code = getCountry($obj->country_id, 'all'); + $country_code = getCountry($obj->country_id, 2); $contactstatic->country_code = $country_code; print "
    '; - // Ref - print ''; - + // Ref/ID + if (! empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) + { + print ''; + } + // Lastname print ''; print ''; @@ -1040,23 +1043,34 @@ else } - print '
    '.$langs->trans("Ref").''; - print $object->ref; - print '
    '.$langs->trans("ID").''; + print $object->ref; + print '
    lastname).'" autofocus="autofocus">
    '; - $linkback = ''.$langs->trans("BackToList").''; + + $morehtmlref=$object->getFullName($langs); + + dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', ''); + + + print '
    '; + print '
    '; + + print '
    '; + print '
    '; + // Ref - print ''; // Name print ''; print ''; - + */ + // Company if (empty($conf->global->SOCIETE_DISABLE_CONTACTS)) { - print ''; } - + */ + print ''; // Civility - print ''; // Role - print ''; + print ''; // Address + /* print ''; @@ -1112,68 +1129,72 @@ else // State if (empty($conf->global->SOCIETE_DISABLE_STATE)) { - print ''; - } + print ''; + }*/ // Phone + /* print ''; print ''; print ''; print ''; - + */ + // Email - print ''; + //print ''; if (! empty($conf->mailing->enabled)) { $langs->load("mails"); - print ''; - print ''; + print ''; + print ''; } - else - { - print ''; - } - print ''; // Instant message and no email - print ''; + print ''; if (!empty($conf->mailing->enabled)) { - print ''; + print ''; } - else - { - print ''; - } - print ''; // Skype if (! empty($conf->skype->enabled)) { - print ''; + print ''; } - print ''; // Note Public - print ''; // Note Private - print ''; + print ''; + */ + + print '
    '.$langs->trans("Ref").''; + /*print '
    '.$langs->trans("Ref").''; print $form->showrefnav($object, 'id', $linkback); print '
    '.$langs->trans("Lastname").' / '.$langs->trans("Label").''.$object->lastname.''.$langs->trans("Firstname").''.$object->firstname.'
    '.$langs->trans("ThirdParty").''; + print '
    '.$langs->trans("ThirdParty").''; if ($object->socid > 0) { $objsoc->fetch($object->socid); @@ -1070,6 +1084,7 @@ else } // Photo + /* if ($object->photo) { print ''; @@ -1080,18 +1095,20 @@ else print ' '; print '
    '.$langs->trans("UserTitle").''; + print '
    '.$langs->trans("UserTitle").''; print $object->getCivilityLabel(); print '
    '.$langs->trans("PostOrFunction").''.$object->poste.'
    '.$langs->trans("PostOrFunction").''.$object->poste.'
    '.$langs->trans("Address").''; dol_print_address($object->address,'gmap','contact',$object->id); print '
    '.$langs->trans('State').''.$object->state.'
    '.$langs->trans('State').''.$object->state.'
    '.$langs->trans("PhonePro").''.dol_print_phone($object->phone_pro,$object->country_code,$object->id,$object->socid,'AC_TEL').''.$langs->trans("PhonePerso").''.dol_print_phone($object->phone_perso,$object->country_code,$object->id,$object->socid,'AC_TEL').'
    '.$langs->trans("PhoneMobile").''.dol_print_phone($object->phone_mobile,$object->country_code,$object->id,$object->socid,'AC_TEL').''.$langs->trans("Fax").''.dol_print_phone($object->fax,$object->country_code,$object->id,$object->socid,'AC_FAX').'
    '.$langs->trans("EMail").''.dol_print_email($object->email,$object->id,$object->socid,'AC_EMAIL').'
    '.$langs->trans("EMail").''.dol_print_email($object->email,$object->id,$object->socid,'AC_EMAIL').'
    '.$langs->trans("NbOfEMailingsSend").''.$object->getNbOfEMailings().'
    '.$langs->trans("NbOfEMailingsSend").''.$object->getNbOfEMailings().'
     
    '.$langs->trans("IM").''.$object->jabberid.'
    '.$langs->trans("IM").''.$object->jabberid.'
    '.$langs->trans("No_Email").''.yn($object->no_email).'
    '.$langs->trans("No_Email").''.yn($object->no_email).'
     
    '.$langs->trans("Skype").''.dol_print_skype($object->skype,0,$object->fk_soc,1).'
    '.$langs->trans("Skype").''.dol_print_skype($object->skype,0,$object->fk_soc,1).'
    '.$langs->trans("ContactVisibility").''; + print '
    '.$langs->trans("ContactVisibility").''; print $object->LibPubPriv($object->priv); print '
    '.$langs->trans("NotePublic").''; + /* + print '
    '.$langs->trans("NotePublic").''; print nl2br($object->note_public); print '
    '.$langs->trans("NotePrivate").''; + print '
    '.$langs->trans("NotePrivate").''; print nl2br($object->note_private); - - // Statut - print '
    '.$langs->trans("Status").'
    '; + + print '
    '; + print '
    '; + + print '
    '; + print ''; + + // Statut + /*print ''; print ''; print ''."\n"; - + */ + // Categories if (! empty($conf->categorie->enabled) && ! empty($user->rights->categorie->lire)) { print ''; @@ -1240,7 +1261,10 @@ else print ''; print "
    '.$langs->trans("Status").''; print $object->getLibStatut(4); print '
    ' . $langs->trans( "Categories" ) . '
    "; - + + print '
    '; + print '
    '; + print dol_fiche_end(); // Barre d'actions diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 76fd73a324d..7ca7627333d 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -446,9 +446,19 @@ abstract class CommonObject $countriesusingstate=array('AU','US','IN','GB','ES','UK','TR'); - $out=''; + $contacti=0; + $thirdpartyid=0; + if ($this->elemet == 'societe') + { + $thirdpartyid=$this->id; + } + if ($this->elemet == 'contact') + { + $contactid=$this->id; + $thirdpartyid=$object->id; + } - $out.=''; + $out=''; $outdone=0; $coords = $this->getFullAddress(1,', '); @@ -471,19 +481,22 @@ abstract class CommonObject $out.=($outdone?'
    ':'').$this->state; $outdone++; } - + if ($this->phone_pro || $this->phone_mobile || $this->phone_perso || $this->fax) $out.=($outdone?'
    ':''); - if ($this->phone_pro) { - $out.=dol_print_phone($this->phone_pro,$country_code['code'],$this->rowid,$object->id,'AC_TEL',' ','phone'); $outdone++; + if ($this->phone && empty($this->phone_pro)) { // For object storing pro phone into ->phone + $out.=dol_print_phone($this->phone,$country_code['code'],$contactid,$thirdpartyid,'AC_TEL',' ','phone',$langs->trans("PhonePro")); $outdone++; } - if ($this->phone_mobile) { - $out.=dol_print_phone($this->phone_mobile,$country_code['code'],$this->rowid,$object->id,'AC_TEL',' ','phone'); $outdone++; + if (! empty($this->phone_pro)) { + $out.=dol_print_phone($this->phone_pro,$country_code['code'],$contactid,$thirdpartyid,'AC_TEL',' ','phone',$langs->trans("PhonePro")); $outdone++; } - if ($this->phone_perso) { - $out.=dol_print_phone($this->phone_perso,$country_code['code'],$this->rowid,$object->id,'AC_TEL',' ','phone'); $outdone++; + if (! empty($this->phone_mobile)) { + $out.=dol_print_phone($this->phone_mobile,$country_code['code'],$contactid,$thirdpartyid,'AC_TEL',' ','phone',$langs->trans("PhoneMobile")); $outdone++; } - if ($this->fax) { - $out.=dol_print_phone($this->fax,$country_code['code'],$this->rowid,$object->id,'AC_FAX',' ','fax'); $outdone++; + if (! empty($this->phone_perso)) { + $out.=dol_print_phone($this->phone_perso,$country_code['code'],$contactid,$thirdpartyid,'AC_TEL',' ','phone',$langs->trans("PhonePerso")); $outdone++; + } + if (! empty($this->fax)) { + $out.=dol_print_phone($this->fax,$country_code['code'],$contactid,$thirdpartyid,'AC_FAX',' ','fax',$langs->trans("Fax")); $outdone++; } $out.='
    '; @@ -503,7 +516,7 @@ abstract class CommonObject if ($this->skype) $out.=($outdone?'
    ':'').dol_print_skype($this->skype,$this->id,$object->id,'AC_SKYPE'); } - $out.=''; + $out.=''; return $out; } diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 4aea23291c2..8dd0725b1b8 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5152,7 +5152,16 @@ class Form $ret.='
    '; - $ret.=dol_htmlentities($object->$fieldref); + // For thirdparty and contact, the ref is he id, so we show something else + if ($object->element == 'societe') + { + $ret.=dol_htmlentities($object->name); + } + else if ($object->element == 'contact') + { + $ret.=dol_htmlentities($object->getFullName($langs)); + } + else $ret.=dol_htmlentities($object->$fieldref); if ($morehtmlref) { $ret.=' '.$morehtmlref; diff --git a/htdocs/core/lib/company.lib.php b/htdocs/core/lib/company.lib.php index d7fbaedfeba..565078a9d3b 100644 --- a/htdocs/core/lib/company.lib.php +++ b/htdocs/core/lib/company.lib.php @@ -706,7 +706,7 @@ function show_contacts($conf,$langs,$db,$object,$backtopage='') $contactstatic->web = $obj->web; $contactstatic->skype = $obj->skype; - $country_code = getCountry($obj->country_id, 'all'); + $country_code = getCountry($obj->country_id, 2); $contactstatic->country_code = $country_code; print "
    '; + // Ref/ID + if (! empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) + { + print ''; + } + // Name print ''; print ''; @@ -2140,7 +2148,7 @@ else } elseif($mysoc->localtax1_assuj=="1" && $mysoc->localtax2_assuj!="1") { - print ''; if($object->localtax1_assuj=="1" && (! isOnlyOneLocalTax(1))) @@ -2162,7 +2170,7 @@ else } elseif($mysoc->localtax2_assuj=="1" && $mysoc->localtax1_assuj!="1") { - print ''; if($object->localtax2_assuj=="1" && (! isOnlyOneLocalTax(2))) @@ -2325,7 +2333,7 @@ else if (! empty($conf->adherent->enabled)) { $langs->load("members"); - print ''; + print ''; print '
    '.$langs->trans("ID").''; + print $object->ref; + print '
    '.fieldLabel('ThirdPartyName','name',1).'
    '.$langs->transcountry("LocalTax1IsUsed",$mysoc->country_code).''; + print '
    '.$langs->transcountry("LocalTax1IsUsed",$mysoc->country_code).''; print yn($object->localtax1_assuj); print '
    '.$langs->transcountry("LocalTax2IsUsed",$mysoc->country_code).''; + print '
    '.$langs->transcountry("LocalTax2IsUsed",$mysoc->country_code).''; print yn($object->localtax2_assuj); print '
    '.$langs->trans("LinkedToDolibarrMember").'
    '.$langs->trans("LinkedToDolibarrMember").''; $adh=new Adherent($db); $result=$adh->fetch('','',$object->id); @@ -2349,8 +2357,9 @@ else } print '
    '; - - print '
    '; + print ''; + + print ''; print '
    '; dol_fiche_end(); diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index ed6c1291ef5..7aa68f69340 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -623,7 +623,7 @@ div.divphotoref { div.statusref { float: right; padding-right: 12px; - margin-top: 9px; + margin-top: 7px; margin-bottom: 10px; } img.photoref { @@ -2132,11 +2132,15 @@ div.pagination li.pagination span.inactive { cursor: default; } div.pagination li.litext a { -border: none; + border: none; padding-right: 10px; padding-left: 4px; font-weight: bold; } +div.pagination li.litext a:hover { + background-color: transparent; + background-image: none; +} dol_use_jmobile)) { ?> div.pagination li.litext { padding-top: 13px; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index f909915d794..161ca0113eb 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -673,7 +673,7 @@ div.divphotoref { div.statusref { float: right; padding-right: 12px; - margin-top: 9px; + margin-top: 7px; margin-bottom: 10px; } img.photoref { From 8cd17c01658feba4c2973a8bc89087261f905564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Garci=CC=81a=20de=20La=20Fuente?= Date: Sun, 11 Oct 2015 13:01:28 +0200 Subject: [PATCH 37/51] =?UTF-8?q?FIX=20[=20bug=20#3197=20]=C2=A0Trigger=20?= =?UTF-8?q?LINECONTRACT=5FCREATE=20does=20not=20follow=20common=20denomina?= =?UTF-8?q?tion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Close #3197 --- htdocs/contrat/class/contrat.class.php | 4 ++-- htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/contrat/class/contrat.class.php b/htdocs/contrat/class/contrat.class.php index 6fa4e5c46a8..76a868a7888 100644 --- a/htdocs/contrat/class/contrat.class.php +++ b/htdocs/contrat/class/contrat.class.php @@ -1332,7 +1332,7 @@ class Contrat extends CommonObject if (empty($error)) { // Call trigger - $result=$this->call_trigger('LINECONTRACT_CREATE',$user); + $result=$this->call_trigger('LINECONTRACT_INSERT',$user); if ($result < 0) { $this->db->rollback(); @@ -2644,7 +2644,7 @@ class ContratLigne extends CommonObjectLine if (!$notrigger) { // Call trigger - $result = $this->call_trigger('LINECONTRACT_CREATE', $user); + $result = $this->call_trigger('LINECONTRACT_INSERT', $user); if ($result < 0) { $this->db->rollback(); return -1; diff --git a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN index fd4d59538f3..84f67660c41 100644 --- a/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN +++ b/htdocs/core/triggers/interface_90_all_Demo.class.php-NORUN @@ -167,7 +167,7 @@ class InterfaceDemo extends DolibarrTriggers case 'CONTRACT_CANCEL': case 'CONTRACT_CLOSE': case 'CONTRACT_DELETE': - case 'LINECONTRACT_CREATE': + case 'LINECONTRACT_INSERT': case 'LINECONTRACT_UPDATE': case 'LINECONTRACT_DELETE': From 0ba6bdb7c29cbdafa4caf2c7a11e7400878ab788 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 11 Oct 2015 13:26:22 +0200 Subject: [PATCH 38/51] CSS enhancement --- htdocs/core/lib/usergroups.lib.php | 2 +- htdocs/core/tpl/objectline_create.tpl.php | 8 ++++---- htdocs/theme/eldy/style.css.php | 5 ++++- htdocs/theme/md/style.css.php | 4 ++++ 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/usergroups.lib.php b/htdocs/core/lib/usergroups.lib.php index 10b97265a93..23e122b89f6 100644 --- a/htdocs/core/lib/usergroups.lib.php +++ b/htdocs/core/lib/usergroups.lib.php @@ -462,7 +462,7 @@ function show_theme($fuser,$edit=0,$foruserprofile=false) if ($color) print ''; else print $langs->trans("Default"); } - print '   ('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; + print '   ('.$langs->trans("Default").': 6e7896, '.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')'; print '
    '; + dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', ''); + + + print '
    '; + + print '
    '; + + print '
    '; + dol_print_object_info($object); - print '
    '; + print '
    '; + dol_fiche_end(); } diff --git a/htdocs/user/card.php b/htdocs/user/card.php index b74b921c735..35f504c334f 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -1192,15 +1192,16 @@ else $rowspan=19; - print ''; - - // Ref - print ''; - print ''; - print ''."\n"; + dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); + + + print '
    '; + print '
    '; + + print '
    '; + print '
    '.$langs->trans("Ref").''; - print $form->showrefnav($object,'id','',$user->rights->user->user->lire || $user->admin); - print '
    '; + if (isset($conf->file->main_authentication) && preg_match('/openid/',$conf->file->main_authentication) && ! empty($conf->global->MAIN_OPENIDURL_PERUSER)) $rowspan++; if (! empty($conf->societe->enabled)) $rowspan++; if (! empty($conf->adherent->enabled)) $rowspan++; @@ -1208,25 +1209,9 @@ else if (! empty($conf->salaries->enabled) && ! empty($user->rights->salaries->read)) $rowspan = $rowspan+3; if (! empty($conf->agenda->enabled)) $rowspan++; - // Lastname - print ''; - print ''; - - // Photo - print ''; - - print ''."\n"; - - // Firstname - print ''; - print ''; - print ''."\n"; - // Position/Job print ''; - print ''; + print ''; print ''."\n"; // Gender @@ -1239,11 +1224,11 @@ else print ''; if (! empty($object->ldap_sid) && $object->statut==0) { - print ''; + print ''; } else { - print ''; + print ''; } print ''."\n"; @@ -1253,24 +1238,24 @@ else { if ($passDoNotExpire) { - print ''; + print ''; } else if($userChangePassNextLogon) { - print ''; + print ''; } else if($userDisabled) { - print ''; + print ''; } else { - print ''; + print ''; } } else { - print ''; - print ''."\n"; } - // Tel pro - print ''; - print ''; - print ''."\n"; - - // Tel mobile - print ''; - print ''; - print ''."\n"; - - // Fax - print ''; - print ''; - print ''."\n"; - // Skype if (! empty($conf->skype->enabled)) { print ''; - print ''; + print ''; print "\n"; } - // EMail - print ''; - print ''; - print "\n"; - // Signature print ''; - print ''; - print ''; print "\n"; @@ -1389,14 +1354,14 @@ else $text=$langs->trans("TJM"); print $form->textwithpicto($text, $langs->trans("TJMDescription"), 1, 'help', 'classtjm'); print ''; - print ''; print "\n"; // Salary print ''; - print ''; print "\n"; @@ -1404,7 +1369,7 @@ else // Weeklyhours print ''; - print ''; print "\n"; @@ -1413,38 +1378,39 @@ else if ($conf->salaries->enabled) { print ''; - print ''; + print ''; } // Color user if (! empty($conf->agenda->enabled)) { print ''; - print ''; print "\n"; } - // Status - print ''; - print ''; - print ''."\n"; - - print ''; - print ''; + print '
    '.$langs->trans("Lastname").''.$object->lastname.''; - print $form->showphoto('userphoto',$object,100); - print '
    '.$langs->trans("Firstname").''.$object->firstname.'
    '.$langs->trans("PostOrFunction").''.$object->job.''.$object->job.'
    '.$langs->trans("Login").''.$langs->trans("LoginAccountDisableInDolibarr").''.$langs->trans("LoginAccountDisableInDolibarr").''.$object->login.''.$object->login.'
    '.$langs->trans("LdapUacf_".$statutUACF).''.$langs->trans("LdapUacf_".$statutUACF).''.$langs->trans("UserMustChangePassNextLogon",$ldap->domainFQDN).''.$langs->trans("UserMustChangePassNextLogon",$ldap->domainFQDN).''.$langs->trans("LdapUacf_".$statutUACF,$ldap->domainFQDN).''.$langs->trans("LdapUacf_".$statutUACF,$ldap->domainFQDN).''.$langs->trans("DomainPassword").''.$langs->trans("DomainPassword").''; + print ''; if ($object->pass) print preg_replace('/./i','*',$object->pass); else { @@ -1284,14 +1269,14 @@ else // API key if(! empty($conf->api->enabled) && $user->admin) { print '
    '.$langs->trans("ApiKey").''; + print ''; if (! empty($object->api_key)) print $langs->trans("Hidden"); print ''; } // Administrator - print '
    '.$langs->trans("Administrator").''; + print '
    '.$langs->trans("Administrator").''; if (! empty($conf->multicompany->enabled) && $object->admin && ! $object->entity) { print $form->textwithpicto(yn($object->admin),$langs->trans("SuperAdministratorDesc"),1,"superadmin"); @@ -1310,7 +1295,7 @@ else print '
    '; $text=$langs->trans("Type"); print $form->textwithpicto($text, $langs->trans("InternalExternalDesc")); - print ''; + print ''; $type=$langs->trans("Internal"); if ($object->societe_id > 0) $type=$langs->trans("External"); print $type; @@ -1320,39 +1305,19 @@ else // Ldap sid if ($object->ldap_sid) { - print '
    '.$langs->trans("Type").''; + print '
    '.$langs->trans("Type").''; print $langs->trans("DomainUser",$ldap->domainFQDN); print '
    '.$langs->trans("PhonePro").''.dol_print_phone($object->office_phone,'',0,0,1).'
    '.$langs->trans("PhoneMobile").''.dol_print_phone($object->user_mobile,'',0,0,1).'
    '.$langs->trans("Fax").''.dol_print_phone($object->office_fax,'',0,0,1).'
    '.$langs->trans("Skype").''.dol_print_skype($object->skype,0,0,1).''.dol_print_skype($object->skype,0,0,1).'
    '.$langs->trans("EMail").''.dol_print_email($object->email,0,0,1).'
    '.$langs->trans('Signature').''; print dol_htmlentitiesbr($object->signature); @@ -1360,7 +1325,7 @@ else // Hierarchy print '
    '.$langs->trans("HierarchicalResponsible").''; + print ''; if (empty($object->fk_user)) print $langs->trans("None"); else { $huser=new User($db); @@ -1379,7 +1344,7 @@ else $text=$langs->trans("THM"); print $form->textwithpicto($text, $langs->trans("THMDescription"), 1, 'help', 'classthm'); print ''; + print ''; print ($object->thm!=''?price($object->thm,'',$langs,1,-1,-1,$conf->currency):''); print '
    '; + print ''; print ($object->tjm!=''?price($object->tjm,'',$langs,1,-1,-1,$conf->currency):''); print '
    '.$langs->trans("Salary").''; + print ''; print ($object->salary!=''?price($object->salary,'',$langs,1,-1,-1,$conf->currency):''); print '
    '.$langs->trans("WeeklyHours").''; + print ''; print price2num($object->weeklyhours); print '
    '.$langs->trans("AccountancyCode").''.$object->accountancy_code.''.$object->accountancy_code.'
    '.$langs->trans("ColorUser").''; + print ''; print $formother->showColor($object->color, ''); print '
    '.$langs->trans("Status").''; - print $object->getLibStatut(4); - print '
    '.$langs->trans("LastConnexion").''.dol_print_date($object->datelastlogin,"dayhour").'
    '; + + print '
    '; + print '
    '; + + print '
    '; + print ''; + + print ''; + print ''; print "\n"; print ''; - print ''; + print ''; print "\n"; if (isset($conf->file->main_authentication) && preg_match('/openid/',$conf->file->main_authentication) && ! empty($conf->global->MAIN_OPENIDURL_PERUSER)) { print ''; - print ''; + print ''; print "\n"; } @@ -1452,7 +1418,7 @@ else if (! empty($conf->societe->enabled)) { print ''; - print ''; - print '
    '.$langs->trans("LastConnexion").''.dol_print_date($object->datelastlogin,"dayhour").'
    '.$langs->trans("PreviousConnexion").''.dol_print_date($object->datepreviouslogin,"dayhour").''.dol_print_date($object->datepreviouslogin,"dayhour").'
    '.$langs->trans("OpenIDURL").''.$object->openid.''.$object->openid.'
    '.$langs->trans("LinkToCompanyContact").''; + print ''; if (isset($object->societe_id) && $object->societe_id > 0) { $societe = new Societe($db); @@ -1480,7 +1446,7 @@ else { $langs->load("members"); print '
    '.$langs->trans("LinkedToDolibarrMember").''; + print ''; if ($object->fk_member) { $adh=new Adherent($db); @@ -1502,7 +1468,7 @@ else { if (! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode) && $conf->entity == 1 && $user->admin && ! $user->entity) { - print '
    '.$langs->trans("Entity").''; + print '
    '.$langs->trans("Entity").''; if (empty($object->entity)) { print $langs->trans("AllEntities"); @@ -1517,7 +1483,7 @@ else } // Other attributes - $parameters=array('colspan' => ' colspan="2"'); + $parameters=array(); $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)) { @@ -1525,6 +1491,11 @@ else } print "
    \n"; + print '
    '; + + print '
    '; + print '
    '; + dol_fiche_end(); @@ -1761,12 +1732,16 @@ else print ''; - print ''; - print ''; - print ''; - + // Ref/ID + if (! empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) + { + print ''; + print ''; + print ''; + } + // Lastname print ""; print ''; diff --git a/htdocs/user/info.php b/htdocs/user/info.php index e2fdcc7b6ec..f069ac4782b 100644 --- a/htdocs/user/info.php +++ b/htdocs/user/info.php @@ -54,6 +54,8 @@ if (($object->id != $user->id) && (! $user->rights->user->user->lire)) * View */ +$form = new Form($db); + llxHeader(); $object->info($id); @@ -64,12 +66,24 @@ $title = $langs->trans("User"); dol_fiche_head($head, 'info', $title, 0, 'user'); -print '
    '.$langs->trans("Ref").''; - print $object->id; - print '
    '.$langs->trans("Ref").''; + print $object->id; + print '
    '.$langs->trans("Lastname").'
    '; +$linkback = ''.$langs->trans("BackToList").''; + +dol_banner_tab($object, 'id', $linkback, 1, 'rowid', 'ref', ''); + + +print '
    '; + +print '
    '; + +print '
    '; + dol_print_object_info($object); -print '
    '; print ''; -$db->close(); + +dol_fiche_end(); + llxFooter(); +$db->close(); From b24d609ecceddca2bf942378698aef5ecda59ae1 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 11 Oct 2015 16:12:12 +0200 Subject: [PATCH 40/51] New banner tab is available on all tab of user object --- htdocs/holiday/list.php | 27 +++++------------ htdocs/theme/eldy/style.css.php | 2 ++ htdocs/user/agenda_extsites.php | 25 ++++++++++------ htdocs/user/card.php | 36 +++++++++-------------- htdocs/user/document.php | 21 ++++---------- htdocs/user/note.php | 26 +++++------------ htdocs/user/param_ihm.php | 51 +++++++++++++++------------------ htdocs/user/perms.php | 22 +++----------- 8 files changed, 77 insertions(+), 133 deletions(-) diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php index ee4465a4aee..419fabf9087 100644 --- a/htdocs/holiday/list.php +++ b/htdocs/holiday/list.php @@ -218,26 +218,13 @@ if ($id > 0) $title = $langs->trans("User"); dol_fiche_head($head, 'paidholidays', $title, 0, 'user'); - print ''; - - // Ref - print ''; - print ''; - print ''; - - // LastName - print ''; - print ''; - print "\n"; - - // FirstName - print ''; - print ''; - print "\n"; - - print '
    '.$langs->trans("Ref").''; - print $form->showrefnav($fuser,'id','',$user->rights->user->user->lire || $user->admin); - print '
    '.$langs->trans("LastName").''.$fuser->lastname.'
    '.$langs->trans("FirstName").''.$fuser->firstname.'

    '; + dol_banner_tab($fuser,'id','',$user->rights->user->user->lire || $user->admin); + + + print '
    '; + + print '
    '; + } else { diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 5457a6690df..425cb84bdb9 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -489,6 +489,7 @@ div.confirmmessage { .maxwidth100 { max-width: 100px; } .maxwidth200 { max-width: 200px; } .maxwidth300 { max-width: 300px; } +.titlefield { width: 25% } .hideonsmartphone { display: none; } .noenlargeonsmartphone { width : 50px !important; display: inline !important; } @@ -496,6 +497,7 @@ div.confirmmessage { .maxwidth100onsmartphone { max-width: 100px; } .maxwidth200onsmartphone { max-width: 200px; } .maxwidth300onsmartphone { max-width: 300px; } +.titlefield { width: auto; } .linkobject { cursor: pointer; } diff --git a/htdocs/user/agenda_extsites.php b/htdocs/user/agenda_extsites.php index cd38d7a2965..ea8c1978677 100644 --- a/htdocs/user/agenda_extsites.php +++ b/htdocs/user/agenda_extsites.php @@ -49,8 +49,8 @@ $colorlist=array('BECEDD','DDBECE','BFDDBE','F598B4','F68654','CBF654','A4A4A5') // Security check $id = GETPOST('id','int'); -$fuser = new User($db); -$fuser->fetch($id); +$object = new User($db); +$object->fetch($id); // Security check $socid=0; @@ -63,7 +63,7 @@ if ($user->id == $id) // A user can always read its own card $result = restrictedArea($user, 'user', $id, 'user&user', $feature2); // If user is not user that read and no permission to read other users, we stop -if (($fuser->id != $user->id) && (! $user->rights->user->user->lire)) +if (($object->id != $user->id) && (! $user->rights->user->user->lire)) accessforbidden(); @@ -108,7 +108,7 @@ if ($actionsave) if (! $error) { - $result=dol_set_user_param($db, $conf, $fuser, $tabparam); + $result=dol_set_user_param($db, $conf, $object, $tabparam); if (! $result > 0) $error++; } @@ -141,10 +141,16 @@ llxHeader('',$langs->trans("UserSetup"),'','',0,0,$arrayofjs,$arrayofcss); print '
    '; print ''; -$head=user_prepare_head($fuser); +$head=user_prepare_head($object); dol_fiche_head($head, 'extsites', $langs->trans("User"), 0, 'user'); +dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); + +print '
    '; + +print '
    '; + print $langs->trans("AgendaExtSitesDesc")."
    \n"; print "
    \n"; @@ -177,15 +183,15 @@ while ($i <= $MAXAGENDA) // Nb print '
    '.$langs->trans("AgendaExtNb",$key)."'; //print $formadmin->selectColor($conf->global->$color, "google_agenda_color".$key, $colorlist); - print $formother->selectColor((GETPOST("AGENDA_EXT_COLOR_".$id.'_'.$key)?GETPOST("AGENDA_EXT_COLOR_".$id.'_'.$key):$fuser->conf->$color), "AGENDA_EXT_COLOR_".$id.'_'.$key, 'extsitesconfig', 1, '', 'hideifnotset'); + print $formother->selectColor((GETPOST("AGENDA_EXT_COLOR_".$id.'_'.$key)?GETPOST("AGENDA_EXT_COLOR_".$id.'_'.$key):$object->conf->$color), "AGENDA_EXT_COLOR_".$id.'_'.$key, 'extsitesconfig', 1, '', 'hideifnotset'); print '
    '; + dol_fiche_end(); print '
    '; diff --git a/htdocs/user/card.php b/htdocs/user/card.php index 35f504c334f..25167d1fd94 100644 --- a/htdocs/user/card.php +++ b/htdocs/user/card.php @@ -1190,9 +1190,6 @@ else { dol_fiche_head($head, 'user', $title, 0, 'user'); - $rowspan=19; - - dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); @@ -1202,24 +1199,6 @@ else print '
    '; print ''; - if (isset($conf->file->main_authentication) && preg_match('/openid/',$conf->file->main_authentication) && ! empty($conf->global->MAIN_OPENIDURL_PERUSER)) $rowspan++; - if (! empty($conf->societe->enabled)) $rowspan++; - if (! empty($conf->adherent->enabled)) $rowspan++; - if (! empty($conf->skype->enabled)) $rowspan++; - if (! empty($conf->salaries->enabled) && ! empty($user->rights->salaries->read)) $rowspan = $rowspan+3; - if (! empty($conf->agenda->enabled)) $rowspan++; - - // Position/Job - print ''; - print ''; - print ''."\n"; - - // Gender - print ''; - print ''; - // Login print ''; if (! empty($object->ldap_sid) && $object->statut==0) @@ -1266,13 +1245,24 @@ else } print ''."\n"; + // Position/Job + print ''; + print ''; + print ''."\n"; + + // Gender + print ''; + print ''; + // API key if(! empty($conf->api->enabled) && $user->admin) { print ''; print ''; } // Administrator @@ -1319,7 +1309,7 @@ else } // Signature - print '\n"; diff --git a/htdocs/user/document.php b/htdocs/user/document.php index 25dea7eb398..46ceb72330c 100644 --- a/htdocs/user/document.php +++ b/htdocs/user/document.php @@ -1,6 +1,6 @@ - * Copyright (C) 2004-2010 Laurent Destailleur + * Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2015 Regis Houssin * Copyright (C) 2010 Juanjo Menent * Copyright (C) 2013 Cédric Salvador @@ -121,7 +121,10 @@ if ($object->id) dol_fiche_head($head, 'document', $langs->trans("User"),0,'user'); - + dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); + + print '
    '; + // Construit liste des fichiers $filearray=dol_dir_list($upload_dir,"files",0,'','(\.meta|_preview\.png)$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1); $totalsize=0; @@ -133,20 +136,6 @@ if ($object->id) print '
    '.$langs->trans("PostOrFunction").''.$object->job.'
    '.$langs->trans("Gender").''; - if ($object->gender) print $langs->trans("Gender".$object->gender); - print '
    '.$langs->trans("Login").'
    '.$langs->trans("PostOrFunction").''.$object->job.'
    '.$langs->trans("Gender").''; + if ($object->gender) print $langs->trans("Gender".$object->gender); + print '
    '.$langs->trans("ApiKey").''; if (! empty($object->api_key)) print $langs->trans("Hidden"); - print ''; + print '
    '.$langs->trans('Signature').''; + print '
    '.$langs->trans('Signature').''; print dol_htmlentitiesbr($object->signature); print "
    '; - // Reference - print ''; - print ''; - print ''; - - // Lastname - print ''; - print ''; - - // Firstname - print ''; - // Login print ''; diff --git a/htdocs/user/note.php b/htdocs/user/note.php index 7fe5766cd3a..3aec8502ac1 100644 --- a/htdocs/user/note.php +++ b/htdocs/user/note.php @@ -87,33 +87,21 @@ if ($id) $title = $langs->trans("User"); dol_fiche_head($head, 'note', $title, 0, 'user'); - if ($msg) print '
    '.$msg.'
    '; - - print ""; + dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); + + print '
    '; + + print ""; print ''; print '
    '.$langs->trans('Ref').''; - print $form->showrefnav($object,'id','',$user->rights->user->user->lire || $user->admin); - print '
    '.$langs->trans("Lastname").''.$object->lastname.' 
    '.$langs->trans("Firstname").''.$object->firstname.' 
    '.$langs->trans("Login").''.$object->login.' 
    '; - // Reference - print ''; - print ''; - print ''; - - // Lastname - print ''; - print ''; - - // Firstname - print ''; - // Login - print ''; + print ''; // Note print ''; - print '
    '.$langs->trans('Ref').''; - print $form->showrefnav($object,'id','',$user->rights->user->user->lire || $user->admin); - print '
    '.$langs->trans("Lastname").''.$object->lastname.' 
    '.$langs->trans("Firstname").''.$object->firstname.' 
    '.$langs->trans("Login").''.$object->login.' 
    '.$langs->trans("Login").''.$object->login.' 
    '.$langs->trans("Note").''; + print ''; if ($action == 'edit' && $user->rights->user->user->creer) { print ""; diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php index 9e67a1015c7..ef803992d00 100644 --- a/htdocs/user/param_ihm.php +++ b/htdocs/user/param_ihm.php @@ -136,33 +136,18 @@ if ($action == 'edit') } -dol_fiche_head($head, 'guisetup', $title, 0, 'user'); - - -print ''; - -// Ref -print ''; -print ''; -print ''; - -// LastName -print ''; -print ''; -print "\n"; - -// FirstName -print ''; -print ''; -print "\n"; - -print '
    '.$langs->trans("Ref").''; -print $form->showrefnav($object,'id','',$user->rights->user->user->lire || $user->admin); -print '
    '.$langs->trans("LastName").''.$object->lastname.'
    '.$langs->trans("FirstName").''.$object->firstname.'

    '; - - if ($action == 'edit') { + dol_fiche_head($head, 'guisetup', $title, 0, 'user'); + + dol_banner_tab($object,'id','',$user->rights->user->user->lire || $user->admin); + + + print '
    '; + + print '
    '; + + if (! empty($conf->use_javascript_ajax)) {/* print '