From ae180f06a03572412189f94445a5bead7d1135cf Mon Sep 17 00:00:00 2001 From: jfefe Date: Sat, 16 Mar 2013 00:53:46 +0100 Subject: [PATCH 01/20] Fix : document module option was not saved --- htdocs/admin/propal.php | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/htdocs/admin/propal.php b/htdocs/admin/propal.php index 6c18da0e240..755ca681c73 100644 --- a/htdocs/admin/propal.php +++ b/htdocs/admin/propal.php @@ -162,10 +162,34 @@ if ($action == 'setdefaultduration') } } -/*if ($action == 'setusecustomercontactasrecipient') +// Define constants for submodules that contains parameters (forms with param1, param2, ... and value1, value2, ...) +if ($action == 'setModuleOptions') { - dolibarr_set_const($db, "PROPALE_USE_CUSTOMER_CONTACT_AS_RECIPIENT",$_POST["value"],'chaine',0,'',$conf->entity); -}*/ + $post_size=count($_POST); + + $db->begin(); + + for($i=0;$i < $post_size;$i++) + { + if (array_key_exists('param'.$i,$_POST)) + { + $param=GETPOST("param".$i,'alpha'); + $value=GETPOST("value".$i,'alpha'); + if ($param) $res = dolibarr_set_const($db,$param,$value,'chaine',0,'',$conf->entity); + if (! $res > 0) $error++; + } + } + if (! $error) + { + $db->commit(); + $mesg = "".$langs->trans("SetupSaved").""; + } + else + { + $db->rollback(); + $mesg = "".$langs->trans("Error").""; + } +} From 5f1141675c4347562c39db9423d88d99cd21aae8 Mon Sep 17 00:00:00 2001 From: jfefe Date: Sat, 16 Mar 2013 01:10:21 +0100 Subject: [PATCH 02/20] Add constants into config of ODT document for propal : can choose wich ODT will be used on creation and when close to bill or not. --- .../doc/doc_generic_proposal_odt.modules.php | 32 ++++++++++++++++++- htdocs/langs/fr_FR/propal.lang | 3 ++ 2 files changed, 34 insertions(+), 1 deletion(-) 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 0f9e64c1fe2..54cf9efb2cc 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 @@ -106,6 +106,9 @@ class doc_generic_proposal_odt extends ModelePDFPropales $texte.= ''; $texte.= ''; $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= ''; $texte.= ''; // List of directories area @@ -143,8 +146,35 @@ class doc_generic_proposal_odt extends ModelePDFPropales $texte.= '
'; // Scan directories - if (count($listofdir)) $texte.=$langs->trans("NumberOfModelFilesFound").': '.count($listoffiles).''; + if (count($listofdir)) + { + $texte.=$langs->trans("NumberOfModelFilesFound").': '.count($listoffiles).''; + + // Model for creation + $liste=ModelePDFPropales::liste_modeles($this->db); + $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= '"; + + $texte.= ''; + $texte.= ''; + $texte.= '"; + $texte.= ''; + + $texte.= ''; + $texte.= '"; + $texte.= '
'.$langs->trans("DefaultModelPropalCreate").''; + $texte.= $form->selectarray('value2',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_DEFAULT); + $texte.= "
'.$langs->trans("DefaultModelPropalToBill").''; + $texte.= $form->selectarray('value3',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_TOBILL); + $texte.= "
'.$langs->trans("DefaultModelPropalCreate").''; + $texte.= $form->selectarray('value4',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED); + $texte.= "
'; + } + + $texte.= ''; diff --git a/htdocs/langs/fr_FR/propal.lang b/htdocs/langs/fr_FR/propal.lang index 5a4c05f0d6d..5d5d1b2043c 100644 --- a/htdocs/langs/fr_FR/propal.lang +++ b/htdocs/langs/fr_FR/propal.lang @@ -97,4 +97,7 @@ TypeContact_propal_external_CUSTOMER=Contact client suivi propale DocModelAzurDescription=Modèle de propositions commerciales complet (logo...) DocModelJauneDescription=Modèle de proposition Jaune Numbershort=N° +DefaultModelPropalCreate=Modèle par défaut à la création +DefaultModelPropalToBill=Modèle lors de la cloture d'une proposition commerciale (à facturer) +DefaultModelPropalClosed=Modèle lors de la cloture d'une proposition commerciale (non facturée) From 8a3fae31e1850e9c3120f0715cfc5f1c9cc5fb01 Mon Sep 17 00:00:00 2001 From: jfefe Date: Sat, 16 Mar 2013 01:13:44 +0100 Subject: [PATCH 03/20] When create a propal, select model document chosen by defaut in module config --- htdocs/comm/propal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index e17940379bf..11a78523189 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -1331,7 +1331,7 @@ if ($action == 'create') print ''.$langs->trans("DefaultModel").''; print ''; $liste=ModelePDFPropales::liste_modeles($db); - print $form->selectarray('model',$liste,$conf->global->PROPALE_ADDON_PDF); + print $form->selectarray('model',$liste,($conf->global->PROPALE_ADDON_PDF_ODT_DEFAULT?$conf->global->PROPALE_ADDON_PDF_ODT_DEFAULT:$conf->global->PROPALE_ADDON_PDF)); print ""; // Project From 65a9edd5a7795642a120c8827daa53e40ba7379b Mon Sep 17 00:00:00 2001 From: jfefe Date: Sat, 16 Mar 2013 01:52:56 +0100 Subject: [PATCH 04/20] Fix : lang --- .../modules/propale/doc/doc_generic_proposal_odt.modules.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 54cf9efb2cc..959d9b29cd9 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 @@ -166,7 +166,7 @@ class doc_generic_proposal_odt extends ModelePDFPropales $texte.= ""; $texte.= ''; - $texte.= ''.$langs->trans("DefaultModelPropalCreate").''; + $texte.= ''.$langs->trans("DefaultModelPropalClosed").''; $texte.= ''; $texte.= $form->selectarray('value4',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED); $texte.= ""; From 71bb4149cc250800623a32bd910088123796d1e2 Mon Sep 17 00:00:00 2001 From: jfefe Date: Sat, 16 Mar 2013 02:08:07 +0100 Subject: [PATCH 05/20] New : Automatic creation of the document to the closing of the propale depending on the model selected in the configuration --- htdocs/comm/propal/class/propal.class.php | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/htdocs/comm/propal/class/propal.class.php b/htdocs/comm/propal/class/propal.class.php index 66f6bb3874d..a7cc2f71c2b 100644 --- a/htdocs/comm/propal/class/propal.class.php +++ b/htdocs/comm/propal/class/propal.class.php @@ -1634,6 +1634,20 @@ class Propal extends CommonObject $this->db->rollback(); return -2; } + + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) + { + // Define output language + $outputlangs = $langs; + if (! empty($conf->global->MAIN_MULTILANGS)) + { + $outputlangs = new Translate("",$conf); + $newlang=(GETPOST('lang_id') ? GETPOST('lang_id') : $this->client->default_lang); + $outputlangs->setDefaultLang($newlang); + } + //$ret=$object->fetch($id); // Reload to get new records + propale_pdf_create($this->db, $this, $conf->global->PROPALE_ADDON_PDF_ODT_TOBILL?$conf->global->PROPALE_ADDON_PDF_ODT_TOBILL:$this->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); + } // Appel des triggers include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; @@ -1646,6 +1660,21 @@ class Propal extends CommonObject } else { + + if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) + { + // Define output language + $outputlangs = $langs; + if (! empty($conf->global->MAIN_MULTILANGS)) + { + $outputlangs = new Translate("",$conf); + $newlang=(GETPOST('lang_id') ? GETPOST('lang_id') : $this->client->default_lang); + $outputlangs->setDefaultLang($newlang); + } + //$ret=$object->fetch($id); // Reload to get new records + propale_pdf_create($this->db, $this, $conf->global->PROPALE_ADDON_PDF_ODT_CLOSED?$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED:$this->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref); + } + // Appel des triggers include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; $interface=new Interfaces($this->db); From 6a342507122bc2bdf464867586a6d7e85ae87a84 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Mon, 25 Mar 2013 17:54:54 +0100 Subject: [PATCH 06/20] Rewrite module manager. Next step. --- htdocs/core/menus/standard/eldy.lib.php | 164 +++++++++++------------ htdocs/core/menus/standard/eldy_menu.php | 19 +-- htdocs/theme/eldy/style.css.php | 33 +++++ 3 files changed, 126 insertions(+), 90 deletions(-) diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index f7e5143344a..61aaec75fc1 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -455,7 +455,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu // Setup $newmenu->add("/admin/index.php?mainmenu=home&leftmenu=setup", $langs->trans("Setup"), 0, 1, '', $mainmenu, 'setup'); - if ($leftmenu=="setup") + if (empty($leftmenu) || $leftmenu=="setup") { $warnpicto=''; if (empty($conf->global->MAIN_INFO_SOCIETE_NOM) || empty($conf->global->MAIN_INFO_SOCIETE_COUNTRY)) @@ -475,7 +475,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $newmenu->add("/admin/ihm.php?mainmenu=home", $langs->trans("GUISetup"),1); if (! in_array($langs->defaultlang,array('en_US','en_GB','en_NZ','en_AU','fr_FR','fr_BE','es_ES','ca_ES'))) { - if ($leftmenu=="setup") $newmenu->add("/admin/translation.php", $langs->trans("Translation"),1); + if (empty($leftmenu) || $leftmenu=="setup") $newmenu->add("/admin/translation.php", $langs->trans("Translation"),1); } $newmenu->add("/admin/boxes.php?mainmenu=home", $langs->trans("Boxes"),1); $newmenu->add("/admin/delais.php?mainmenu=home",$langs->trans("Alerts"),1); @@ -490,11 +490,11 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu // System tools $newmenu->add("/admin/tools/index.php?mainmenu=home&leftmenu=admintools", $langs->trans("SystemTools"), 0, 1, '', $mainmenu, 'admintools'); - if (preg_match('/^admintools/',$leftmenu)) + if (empty($leftmenu) || preg_match('/^admintools/',$leftmenu)) { $newmenu->add('/admin/system/dolibarr.php?mainmenu=home&leftmenu=admintools_info', $langs->trans('InfoDolibarr'), 1); - if ($leftmenu=='admintools_info') $newmenu->add('/admin/system/modules.php?mainmenu=home&leftmenu=admintools_info', $langs->trans('Modules'), 2); - if ($leftmenu=='admintools_info') $newmenu->add('/admin/triggers.php?mainmenu=home&leftmenu=admintools_info', $langs->trans('Triggers'), 2); + if (empty($leftmenu) || $leftmenu=='admintools_info') $newmenu->add('/admin/system/modules.php?mainmenu=home&leftmenu=admintools_info', $langs->trans('Modules'), 2); + if (empty($leftmenu) || $leftmenu=='admintools_info') $newmenu->add('/admin/triggers.php?mainmenu=home&leftmenu=admintools_info', $langs->trans('Triggers'), 2); $newmenu->add('/admin/system/os.php?mainmenu=home&leftmenu=admintools', $langs->trans('InfoOS'), 1); $newmenu->add('/admin/system/web.php?mainmenu=home&leftmenu=admintools', $langs->trans('InfoWebServer'), 1); $newmenu->add('/admin/system/phpinfo.php?mainmenu=home&leftmenu=admintools', $langs->trans('InfoPHP'), 1); @@ -517,7 +517,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (empty($user->societe_id)) { $newmenu->add("/admin/tools/index.php?mainmenu=home&leftmenu=modulesadmintools", $langs->trans("ModulesSystemTools"), 0, 1, '', $mainmenu, 'modulesadmintools'); - if ($leftmenu=="modulesadmintools" && $user->admin) + if ((empty($leftmenu) || $leftmenu=="modulesadmintools") && $user->admin) { $langs->load("products"); $newmenu->add("/product/admin/product_tools.php?mainmenu=home&leftmenu=modulesadmintools", $langs->trans("ProductVatMassChange"), 1, $user->admin); @@ -527,7 +527,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu } $newmenu->add("/user/home.php?leftmenu=users", $langs->trans("MenuUsersAndGroups"), 0, 1, '', $mainmenu, 'users'); - if ($leftmenu=="users") + if (empty($leftmenu) || $leftmenu=="users") { $newmenu->add("/user/index.php", $langs->trans("Users"), 1, $user->rights->user->user->lire || $user->admin); $newmenu->add("/user/fiche.php?action=create", $langs->trans("NewUser"),2, $user->rights->user->user->creer || $user->admin); @@ -561,11 +561,11 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $langs->load("commercial"); $newmenu->add("/comm/prospect/list.php?leftmenu=prospects", $langs->trans("ListProspectsShort"), 1, $user->rights->societe->lire, '', $mainmenu, 'prospects'); - if ($leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=-1", $langs->trans("LastProspectDoNotContact"), 2, $user->rights->societe->lire); - if ($leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=0", $langs->trans("LastProspectNeverContacted"), 2, $user->rights->societe->lire); - if ($leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=1", $langs->trans("LastProspectToContact"), 2, $user->rights->societe->lire); - if ($leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=2", $langs->trans("LastProspectContactInProcess"), 2, $user->rights->societe->lire); - if ($leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=3", $langs->trans("LastProspectContactDone"), 2, $user->rights->societe->lire); + if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=-1", $langs->trans("LastProspectDoNotContact"), 2, $user->rights->societe->lire); + if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=0", $langs->trans("LastProspectNeverContacted"), 2, $user->rights->societe->lire); + if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=1", $langs->trans("LastProspectToContact"), 2, $user->rights->societe->lire); + if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=2", $langs->trans("LastProspectContactInProcess"), 2, $user->rights->societe->lire); + if (empty($leftmenu) || $leftmenu=="prospects") $newmenu->add("/comm/prospect/list.php?sortfield=s.datec&sortorder=desc&begin=&stcomm=3", $langs->trans("LastProspectContactDone"), 2, $user->rights->societe->lire); $newmenu->add("/societe/soc.php?leftmenu=prospects&action=create&type=p", $langs->trans("MenuNewProspect"), 2, $user->rights->societe->creer); //$newmenu->add("/contact/list.php?leftmenu=customers&type=p", $langs->trans("Contacts"), 2, $user->rights->societe->contact->lire); @@ -624,7 +624,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $newmenu->add("/categories/fiche.php?action=create&type=1", $langs->trans("NewCategory"), 1, $user->rights->categorie->creer); } } - //if ($leftmenu=="cat") $newmenu->add("/categories/liste.php", $langs->trans("List"), 1, $user->rights->categorie->lire); + //if (empty($leftmenu) || $leftmenu=="cat") $newmenu->add("/categories/liste.php", $langs->trans("List"), 1, $user->rights->categorie->lire); } } @@ -643,12 +643,12 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $newmenu->add("/comm/propal/index.php?leftmenu=propals", $langs->trans("Prop"), 0, $user->rights->propale->lire, '', $mainmenu, 'propals'); $newmenu->add("/comm/propal.php?action=create&leftmenu=propals", $langs->trans("NewPropal"), 1, $user->rights->propale->creer); $newmenu->add("/comm/propal/list.php?leftmenu=propals", $langs->trans("List"), 1, $user->rights->propale->lire); - if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=0", $langs->trans("PropalsDraft"), 2, $user->rights->propale->lire); - if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=1", $langs->trans("PropalsOpened"), 2, $user->rights->propale->lire); - if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=2", $langs->trans("PropalStatusSigned"), 2, $user->rights->propale->lire); - if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=3", $langs->trans("PropalStatusNotSigned"), 2, $user->rights->propale->lire); - if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=4", $langs->trans("PropalStatusBilled"), 2, $user->rights->propale->lire); - //if ($leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=2,3,4", $langs->trans("PropalStatusClosedShort"), 2, $user->rights->propale->lire); + if (empty($leftmenu) || $leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=0", $langs->trans("PropalsDraft"), 2, $user->rights->propale->lire); + if (empty($leftmenu) || $leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=1", $langs->trans("PropalsOpened"), 2, $user->rights->propale->lire); + if (empty($leftmenu) || $leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=2", $langs->trans("PropalStatusSigned"), 2, $user->rights->propale->lire); + if (empty($leftmenu) || $leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=3", $langs->trans("PropalStatusNotSigned"), 2, $user->rights->propale->lire); + if (empty($leftmenu) || $leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=4", $langs->trans("PropalStatusBilled"), 2, $user->rights->propale->lire); + //if (empty($leftmenu) || $leftmenu=="propals") $newmenu->add("/comm/propal/list.php?leftmenu=propals&viewstatut=2,3,4", $langs->trans("PropalStatusClosedShort"), 2, $user->rights->propale->lire); $newmenu->add("/comm/propal/stats/index.php?leftmenu=propals", $langs->trans("Statistics"), 1, $user->rights->propale->lire); } @@ -659,12 +659,12 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $newmenu->add("/commande/index.php?leftmenu=orders", $langs->trans("CustomersOrders"), 0, $user->rights->commande->lire, '', $mainmenu, 'orders'); $newmenu->add("/societe/societe.php?leftmenu=orders", $langs->trans("NewOrder"), 1, $user->rights->commande->creer); $newmenu->add("/commande/liste.php?leftmenu=orders", $langs->trans("List"), 1, $user->rights->commande->lire); - if ($leftmenu=="orders") $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=0", $langs->trans("StatusOrderDraftShort"), 2, $user->rights->commande->lire); - if ($leftmenu=="orders") $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=1", $langs->trans("StatusOrderValidated"), 2, $user->rights->commande->lire); - if ($leftmenu=="orders" && ! empty($conf->expedition->enabled)) $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=2", $langs->trans("StatusOrderOnProcessShort"), 2, $user->rights->commande->lire); - if ($leftmenu=="orders") $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=3", $langs->trans("StatusOrderToBill"), 2, $user->rights->commande->lire); // The translation key is StatusOrderToBill but it means StatusDelivered. TODO We should renamed this later - if ($leftmenu=="orders") $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=4", $langs->trans("StatusOrderProcessed"), 2, $user->rights->commande->lire); - if ($leftmenu=="orders") $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=-1", $langs->trans("StatusOrderCanceledShort"), 2, $user->rights->commande->lire); + if (empty($leftmenu) || $leftmenu=="orders") $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=0", $langs->trans("StatusOrderDraftShort"), 2, $user->rights->commande->lire); + if (empty($leftmenu) || $leftmenu=="orders") $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=1", $langs->trans("StatusOrderValidated"), 2, $user->rights->commande->lire); + if (empty($leftmenu) || $leftmenu=="orders" && ! empty($conf->expedition->enabled)) $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=2", $langs->trans("StatusOrderOnProcessShort"), 2, $user->rights->commande->lire); + if (empty($leftmenu) || $leftmenu=="orders") $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=3", $langs->trans("StatusOrderToBill"), 2, $user->rights->commande->lire); // The translation key is StatusOrderToBill but it means StatusDelivered. TODO We should renamed this later + if (empty($leftmenu) || $leftmenu=="orders") $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=4", $langs->trans("StatusOrderProcessed"), 2, $user->rights->commande->lire); + if (empty($leftmenu) || $leftmenu=="orders") $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=-1", $langs->trans("StatusOrderCanceledShort"), 2, $user->rights->commande->lire); $newmenu->add("/commande/stats/index.php?leftmenu=orders", $langs->trans("Statistics"), 1, $user->rights->commande->lire); } @@ -686,10 +686,10 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu $newmenu->add("/contrat/fiche.php?&action=create&leftmenu=contracts", $langs->trans("NewContract"), 1, $user->rights->contrat->creer); $newmenu->add("/contrat/liste.php?leftmenu=contracts", $langs->trans("List"), 1, $user->rights->contrat->lire); $newmenu->add("/contrat/services.php?leftmenu=contracts", $langs->trans("MenuServices"), 1, $user->rights->contrat->lire); - if ($leftmenu=="contracts") $newmenu->add("/contrat/services.php?leftmenu=contracts&mode=0", $langs->trans("MenuInactiveServices"), 2, $user->rights->contrat->lire); - if ($leftmenu=="contracts") $newmenu->add("/contrat/services.php?leftmenu=contracts&mode=4", $langs->trans("MenuRunningServices"), 2, $user->rights->contrat->lire); - if ($leftmenu=="contracts") $newmenu->add("/contrat/services.php?leftmenu=contracts&mode=4&filter=expired", $langs->trans("MenuExpiredServices"), 2, $user->rights->contrat->lire); - if ($leftmenu=="contracts") $newmenu->add("/contrat/services.php?leftmenu=contracts&mode=5", $langs->trans("MenuClosedServices"), 2, $user->rights->contrat->lire); + if (empty($leftmenu) || $leftmenu=="contracts") $newmenu->add("/contrat/services.php?leftmenu=contracts&mode=0", $langs->trans("MenuInactiveServices"), 2, $user->rights->contrat->lire); + if (empty($leftmenu) || $leftmenu=="contracts") $newmenu->add("/contrat/services.php?leftmenu=contracts&mode=4", $langs->trans("MenuRunningServices"), 2, $user->rights->contrat->lire); + if (empty($leftmenu) || $leftmenu=="contracts") $newmenu->add("/contrat/services.php?leftmenu=contracts&mode=4&filter=expired", $langs->trans("MenuExpiredServices"), 2, $user->rights->contrat->lire); + if (empty($leftmenu) || $leftmenu=="contracts") $newmenu->add("/contrat/services.php?leftmenu=contracts&mode=5", $langs->trans("MenuClosedServices"), 2, $user->rights->contrat->lire); } // Interventions @@ -758,7 +758,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu { $langs->load("orders"); if (! empty($conf->facture->enabled)) $newmenu->add("/commande/liste.php?leftmenu=orders&viewstatut=-3", $langs->trans("MenuOrdersToBill2"), 0, $user->rights->commande->lire, '', $mainmenu, 'orders'); - // if ($leftmenu=="orders") $newmenu->add("/commande/", $langs->trans("StatusOrderToBill"), 1, $user->rights->commande->lire); + // if (empty($leftmenu) || $leftmenu=="orders") $newmenu->add("/commande/", $langs->trans("StatusOrderToBill"), 1, $user->rights->commande->lire); } // Donations @@ -766,8 +766,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu { $langs->load("donations"); $newmenu->add("/compta/dons/index.php?leftmenu=donations&mainmenu=accountancy",$langs->trans("Donations"), 0, $user->rights->don->lire, '', $mainmenu, 'donations'); - if ($leftmenu=="donations") $newmenu->add("/compta/dons/fiche.php?action=create",$langs->trans("NewDonation"), 1, $user->rights->don->creer); - if ($leftmenu=="donations") $newmenu->add("/compta/dons/liste.php",$langs->trans("List"), 1, $user->rights->don->lire); + if (empty($leftmenu) || $leftmenu=="donations") $newmenu->add("/compta/dons/fiche.php?action=create",$langs->trans("NewDonation"), 1, $user->rights->don->creer); + if (empty($leftmenu) || $leftmenu=="donations") $newmenu->add("/compta/dons/liste.php",$langs->trans("List"), 1, $user->rights->don->lire); //if ($leftmenu=="donations") $newmenu->add("/compta/dons/stats.php",$langs->trans("Statistics"), 1, $user->rights->don->lire); } @@ -776,36 +776,36 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu { $langs->load("trips"); $newmenu->add("/compta/deplacement/index.php?leftmenu=tripsandexpenses&mainmenu=accountancy", $langs->trans("TripsAndExpenses"), 0, $user->rights->deplacement->lire, '', $mainmenu, 'tripsandexpenses'); - if ($leftmenu=="tripsandexpenses") $newmenu->add("/compta/deplacement/fiche.php?action=create&leftmenu=tripsandexpenses&mainmenu=accountancy", $langs->trans("New"), 1, $user->rights->deplacement->creer); - if ($leftmenu=="tripsandexpenses") $newmenu->add("/compta/deplacement/list.php?leftmenu=tripsandexpenses&mainmenu=accountancy", $langs->trans("List"), 1, $user->rights->deplacement->lire); - if ($leftmenu=="tripsandexpenses") $newmenu->add("/compta/deplacement/stats/index.php?leftmenu=tripsandexpenses&mainmenu=accountancy", $langs->trans("Statistics"), 1, $user->rights->deplacement->lire); + if (empty($leftmenu) || $leftmenu=="tripsandexpenses") $newmenu->add("/compta/deplacement/fiche.php?action=create&leftmenu=tripsandexpenses&mainmenu=accountancy", $langs->trans("New"), 1, $user->rights->deplacement->creer); + if (empty($leftmenu) || $leftmenu=="tripsandexpenses") $newmenu->add("/compta/deplacement/list.php?leftmenu=tripsandexpenses&mainmenu=accountancy", $langs->trans("List"), 1, $user->rights->deplacement->lire); + if (empty($leftmenu) || $leftmenu=="tripsandexpenses") $newmenu->add("/compta/deplacement/stats/index.php?leftmenu=tripsandexpenses&mainmenu=accountancy", $langs->trans("Statistics"), 1, $user->rights->deplacement->lire); } // Taxes and social contributions if (! empty($conf->tax->enabled)) { $newmenu->add("/compta/charges/index.php?leftmenu=tax&mainmenu=accountancy",$langs->trans("MenuTaxAndDividends"), 0, $user->rights->tax->charges->lire, '', $mainmenu, 'tax'); - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/sociales/index.php?leftmenu=tax_social",$langs->trans("MenuSocialContributions"),1,$user->rights->tax->charges->lire); - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/sociales/charges.php?leftmenu=tax_social&action=create",$langs->trans("MenuNewSocialContribution"), 2, $user->rights->tax->charges->creer); - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/charges/index.php?leftmenu=tax_social&mainmenu=accountancy&mode=sconly",$langs->trans("Payments"), 2, $user->rights->tax->charges->lire); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/sociales/index.php?leftmenu=tax_social",$langs->trans("MenuSocialContributions"),1,$user->rights->tax->charges->lire); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/sociales/charges.php?leftmenu=tax_social&action=create",$langs->trans("MenuNewSocialContribution"), 2, $user->rights->tax->charges->creer); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/charges/index.php?leftmenu=tax_social&mainmenu=accountancy&mode=sconly",$langs->trans("Payments"), 2, $user->rights->tax->charges->lire); // VAT if (empty($conf->global->TAX_DISABLE_VAT_MENUS)) { - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/tva/index.php?leftmenu=tax_vat&mainmenu=accountancy",$langs->trans("VAT"),1,$user->rights->tax->charges->lire, '', $mainmenu, 'tax_vat'); - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/tva/fiche.php?leftmenu=tax_vat&action=create",$langs->trans("NewPayment"),2,$user->rights->tax->charges->creer); - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/tva/reglement.php?leftmenu=tax_vat",$langs->trans("Payments"),2,$user->rights->tax->charges->lire); - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/tva/clients.php?leftmenu=tax_vat", $langs->trans("ReportByCustomers"), 2, $user->rights->tax->charges->lire); - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/tva/quadri_detail.php?leftmenu=tax_vat", $langs->trans("ReportByQuarter"), 2, $user->rights->tax->charges->lire); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/tva/index.php?leftmenu=tax_vat&mainmenu=accountancy",$langs->trans("VAT"),1,$user->rights->tax->charges->lire, '', $mainmenu, 'tax_vat'); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/tva/fiche.php?leftmenu=tax_vat&action=create",$langs->trans("NewPayment"),2,$user->rights->tax->charges->creer); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/tva/reglement.php?leftmenu=tax_vat",$langs->trans("Payments"),2,$user->rights->tax->charges->lire); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/tva/clients.php?leftmenu=tax_vat", $langs->trans("ReportByCustomers"), 2, $user->rights->tax->charges->lire); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/tva/quadri_detail.php?leftmenu=tax_vat", $langs->trans("ReportByQuarter"), 2, $user->rights->tax->charges->lire); global $mysoc; //Local Taxes if($mysoc->country_code=='ES' && (isset($mysoc->localtax2_assuj) && $mysoc->localtax2_assuj=="1")) { - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/localtax/index.php?leftmenu=tax_vat&mainmenu=accountancy",$langs->transcountry("LT2",$mysoc->country_code),1,$user->rights->tax->charges->lire); - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/localtax/fiche.php?leftmenu=tax_vat&action=create",$langs->trans("NewPayment"),2,$user->rights->tax->charges->creer); - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/localtax/reglement.php?leftmenu=tax_vat",$langs->trans("Payments"),2,$user->rights->tax->charges->lire); - if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/localtax/clients.php?leftmenu=tax_vat", $langs->trans("ReportByCustomers"), 2, $user->rights->tax->charges->lire); - //if (preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/localtax/quadri_detail.php?leftmenu=tax_vat", $langs->trans("ReportByQuarter"), 2, $user->rights->tax->charges->lire); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/localtax/index.php?leftmenu=tax_vat&mainmenu=accountancy",$langs->transcountry("LT2",$mysoc->country_code),1,$user->rights->tax->charges->lire); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/localtax/fiche.php?leftmenu=tax_vat&action=create",$langs->trans("NewPayment"),2,$user->rights->tax->charges->creer); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/localtax/reglement.php?leftmenu=tax_vat",$langs->trans("Payments"),2,$user->rights->tax->charges->lire); + if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/localtax/clients.php?leftmenu=tax_vat", $langs->trans("ReportByCustomers"), 2, $user->rights->tax->charges->lire); + //if (empty($leftmenu) || preg_match('/^tax/i',$leftmenu)) $newmenu->add("/compta/localtax/quadri_detail.php?leftmenu=tax_vat", $langs->trans("ReportByQuarter"), 2, $user->rights->tax->charges->lire); } } @@ -816,8 +816,8 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (! empty($conf->comptabilite->enabled) && ($conf->global->MAIN_FEATURES_LEVEL >= 2)) { $newmenu->add("/compta/ventilation/index.php?leftmenu=ventil",$langs->trans("Dispatch"),0,$user->rights->compta->ventilation->lire, '', $mainmenu, 'ventil'); - if ($leftmenu=="ventil") $newmenu->add("/compta/ventilation/liste.php",$langs->trans("ToDispatch"),1,$user->rights->compta->ventilation->lire); - if ($leftmenu=="ventil") $newmenu->add("/compta/ventilation/lignes.php",$langs->trans("Dispatched"),1,$user->rights->compta->ventilation->lire); + if (empty($leftmenu) || $leftmenu=="ventil") $newmenu->add("/compta/ventilation/liste.php",$langs->trans("ToDispatch"),1,$user->rights->compta->ventilation->lire); + if (empty($leftmenu) || $leftmenu=="ventil") $newmenu->add("/compta/ventilation/lignes.php",$langs->trans("Dispatched"),1,$user->rights->compta->ventilation->lire); } // Compta expert @@ -834,29 +834,29 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu // Bilan, resultats $newmenu->add("/compta/resultat/index.php?leftmenu=ca&mainmenu=accountancy",$langs->trans("Reportings"),0,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire, '', $mainmenu, 'ca'); - if ($leftmenu=="ca") $newmenu->add("/compta/resultat/index.php?leftmenu=ca",$langs->trans("ReportInOut"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); - if ($leftmenu=="ca") $newmenu->add("/compta/resultat/clientfourn.php?leftmenu=ca",$langs->trans("ByCompanies"),2,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/resultat/index.php?leftmenu=ca",$langs->trans("ReportInOut"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/resultat/clientfourn.php?leftmenu=ca",$langs->trans("ByCompanies"),2,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); /* On verra ca avec module compabilite expert - if ($leftmenu=="ca") $newmenu->add("/compta/resultat/compteres.php?leftmenu=ca","Compte de resultat",2,$user->rights->compta->resultat->lire); - if ($leftmenu=="ca") $newmenu->add("/compta/resultat/bilan.php?leftmenu=ca","Bilan",2,$user->rights->compta->resultat->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/resultat/compteres.php?leftmenu=ca","Compte de resultat",2,$user->rights->compta->resultat->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/resultat/bilan.php?leftmenu=ca","Bilan",2,$user->rights->compta->resultat->lire); */ - if ($leftmenu=="ca") $newmenu->add("/compta/stats/index.php?leftmenu=ca",$langs->trans("ReportTurnover"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/stats/index.php?leftmenu=ca",$langs->trans("ReportTurnover"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); /* - if ($leftmenu=="ca") $newmenu->add("/compta/stats/cumul.php?leftmenu=ca","Cumule",2,$user->rights->compta->resultat->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/stats/cumul.php?leftmenu=ca","Cumule",2,$user->rights->compta->resultat->lire); if (! empty($conf->propal->enabled)) { - if ($leftmenu=="ca") $newmenu->add("/compta/stats/prev.php?leftmenu=ca","Previsionnel",2,$user->rights->compta->resultat->lire); - if ($leftmenu=="ca") $newmenu->add("/compta/stats/comp.php?leftmenu=ca","Transforme",2,$user->rights->compta->resultat->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/stats/prev.php?leftmenu=ca","Previsionnel",2,$user->rights->compta->resultat->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/stats/comp.php?leftmenu=ca","Transforme",2,$user->rights->compta->resultat->lire); } */ - if ($leftmenu=="ca") $newmenu->add("/compta/stats/casoc.php?leftmenu=ca",$langs->trans("ByCompanies"),2,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); - if ($leftmenu=="ca") $newmenu->add("/compta/stats/cabyuser.php?leftmenu=ca",$langs->trans("ByUsers"),2,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/stats/casoc.php?leftmenu=ca",$langs->trans("ByCompanies"),2,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/stats/cabyuser.php?leftmenu=ca",$langs->trans("ByUsers"),2,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); // Journaux //if ($leftmenu=="ca") $newmenu->add("/compta/journaux/index.php?leftmenu=ca",$langs->trans("Journaux"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); //journaux - if ($leftmenu=="ca") $newmenu->add("/compta/journal/sellsjournal.php?leftmenu=ca",$langs->trans("SellsJournal"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); - if ($leftmenu=="ca") $newmenu->add("/compta/journal/purchasesjournal.php?leftmenu=ca",$langs->trans("PurchasesJournal"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/journal/sellsjournal.php?leftmenu=ca",$langs->trans("SellsJournal"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); + if (empty($leftmenu) || $leftmenu=="ca") $newmenu->add("/compta/journal/purchasesjournal.php?leftmenu=ca",$langs->trans("PurchasesJournal"),1,$user->rights->compta->resultat->lire||$user->rights->accounting->comptarapport->lire); } } @@ -889,17 +889,17 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu { $newmenu->add("/compta/prelevement/index.php?leftmenu=withdraw&mainmenu=bank",$langs->trans("StandingOrders"),0,$user->rights->prelevement->bons->lire, '', $mainmenu, 'withdraw'); - //if ($leftmenu=="withdraw") $newmenu->add("/compta/prelevement/demandes.php?status=0&mainmenu=bank",$langs->trans("StandingOrderToProcess"),1,$user->rights->prelevement->bons->lire); + //if (empty($leftmenu) || $leftmenu=="withdraw") $newmenu->add("/compta/prelevement/demandes.php?status=0&mainmenu=bank",$langs->trans("StandingOrderToProcess"),1,$user->rights->prelevement->bons->lire); - if ($leftmenu=="withdraw") $newmenu->add("/compta/prelevement/create.php?mainmenu=bank",$langs->trans("NewStandingOrder"),1,$user->rights->prelevement->bons->creer); + if (empty($leftmenu) || $leftmenu=="withdraw") $newmenu->add("/compta/prelevement/create.php?mainmenu=bank",$langs->trans("NewStandingOrder"),1,$user->rights->prelevement->bons->creer); - if ($leftmenu=="withdraw") $newmenu->add("/compta/prelevement/bons.php?mainmenu=bank",$langs->trans("WithdrawalsReceipts"),1,$user->rights->prelevement->bons->lire); - if ($leftmenu=="withdraw") $newmenu->add("/compta/prelevement/liste.php?mainmenu=bank",$langs->trans("WithdrawalsLines"),1,$user->rights->prelevement->bons->lire); - if ($leftmenu=="withdraw") $newmenu->add("/compta/prelevement/rejets.php?mainmenu=bank",$langs->trans("Rejects"),1,$user->rights->prelevement->bons->lire); - if ($leftmenu=="withdraw") $newmenu->add("/compta/prelevement/stats.php?mainmenu=bank",$langs->trans("Statistics"),1,$user->rights->prelevement->bons->lire); + if (empty($leftmenu) || $leftmenu=="withdraw") $newmenu->add("/compta/prelevement/bons.php?mainmenu=bank",$langs->trans("WithdrawalsReceipts"),1,$user->rights->prelevement->bons->lire); + if (empty($leftmenu) || $leftmenu=="withdraw") $newmenu->add("/compta/prelevement/liste.php?mainmenu=bank",$langs->trans("WithdrawalsLines"),1,$user->rights->prelevement->bons->lire); + if (empty($leftmenu) || $leftmenu=="withdraw") $newmenu->add("/compta/prelevement/rejets.php?mainmenu=bank",$langs->trans("Rejects"),1,$user->rights->prelevement->bons->lire); + if (empty($leftmenu) || $leftmenu=="withdraw") $newmenu->add("/compta/prelevement/stats.php?mainmenu=bank",$langs->trans("Statistics"),1,$user->rights->prelevement->bons->lire); - //if ($leftmenu=="withdraw") $newmenu->add("/compta/prelevement/config.php",$langs->trans("Setup"),1,$user->rights->prelevement->bons->configurer); + //if (empty($leftmenu) || $leftmenu=="withdraw") $newmenu->add("/compta/prelevement/config.php",$langs->trans("Setup"),1,$user->rights->prelevement->bons->configurer); } // Gestion cheques @@ -960,7 +960,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu { $newmenu->add("/categories/fiche.php?action=create&type=0", $langs->trans("NewCategory"), 1, $user->rights->categorie->creer); } - //if ($leftmenu=="cat") $newmenu->add("/categories/liste.php", $langs->trans("List"), 1, $user->rights->categorie->lire); + //if (empty($leftmenu) || $leftmenu=="cat") $newmenu->add("/categories/liste.php", $langs->trans("List"), 1, $user->rights->categorie->lire); } // Stocks @@ -968,10 +968,10 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu { $langs->load("stocks"); $newmenu->add("/product/stock/index.php?leftmenu=stock", $langs->trans("Stocks"), 0, $user->rights->stock->lire, '', $mainmenu, 'stock'); - if ($leftmenu=="stock") $newmenu->add("/product/stock/fiche.php?action=create", $langs->trans("MenuNewWarehouse"), 1, $user->rights->stock->creer); - if ($leftmenu=="stock") $newmenu->add("/product/stock/liste.php", $langs->trans("List"), 1, $user->rights->stock->lire); - if ($leftmenu=="stock") $newmenu->add("/product/stock/valo.php", $langs->trans("EnhancedValue"), 1, $user->rights->stock->lire); - if ($leftmenu=="stock") $newmenu->add("/product/stock/mouvement.php", $langs->trans("Movements"), 1, $user->rights->stock->mouvement->lire); + if (empty($leftmenu) || $leftmenu=="stock") $newmenu->add("/product/stock/fiche.php?action=create", $langs->trans("MenuNewWarehouse"), 1, $user->rights->stock->creer); + if (empty($leftmenu) || $leftmenu=="stock") $newmenu->add("/product/stock/liste.php", $langs->trans("List"), 1, $user->rights->stock->lire); + if (empty($leftmenu) || $leftmenu=="stock") $newmenu->add("/product/stock/valo.php", $langs->trans("EnhancedValue"), 1, $user->rights->stock->lire); + if (empty($leftmenu) || $leftmenu=="stock") $newmenu->add("/product/stock/mouvement.php", $langs->trans("Movements"), 1, $user->rights->stock->mouvement->lire); } // Expeditions @@ -979,9 +979,9 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu { $langs->load("sendings"); $newmenu->add("/expedition/index.php?leftmenu=sendings", $langs->trans("Shipments"), 0, $user->rights->expedition->lire, '', $mainmenu, 'sendings'); - if ($leftmenu=="sendings") $newmenu->add("/expedition/fiche.php?action=create2&leftmenu=sendings", $langs->trans("NewSending"), 1, $user->rights->expedition->creer); - if ($leftmenu=="sendings") $newmenu->add("/expedition/liste.php?leftmenu=sendings", $langs->trans("List"), 1, $user->rights->expedition->lire); - if ($leftmenu=="sendings") $newmenu->add("/expedition/stats/index.php?leftmenu=sendings", $langs->trans("Statistics"), 1, $user->rights->expedition->lire); + if (empty($leftmenu) || $leftmenu=="sendings") $newmenu->add("/expedition/fiche.php?action=create2&leftmenu=sendings", $langs->trans("NewSending"), 1, $user->rights->expedition->creer); + if (empty($leftmenu) || $leftmenu=="sendings") $newmenu->add("/expedition/liste.php?leftmenu=sendings", $langs->trans("List"), 1, $user->rights->expedition->lire); + if (empty($leftmenu) || $leftmenu=="sendings") $newmenu->add("/expedition/stats/index.php?leftmenu=sendings", $langs->trans("Statistics"), 1, $user->rights->expedition->lire); } } @@ -1037,7 +1037,7 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu { $newmenu->add("/categories/fiche.php?action=create&type=1", $langs->trans("NewCategory"), 1, $user->rights->categorie->creer); } - //if ($leftmenu=="cat") $newmenu->add("/categories/liste.php", $langs->trans("List"), 1, $user->rights->categorie->lire); + //if (empty($leftmenu) || $leftmenu=="cat") $newmenu->add("/categories/liste.php", $langs->trans("List"), 1, $user->rights->categorie->lire); } } @@ -1141,13 +1141,13 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu { $newmenu->add("/categories/fiche.php?action=create&type=3", $langs->trans("NewCategory"), 1, $user->rights->categorie->creer); } - //if ($leftmenu=="cat") $newmenu->add("/categories/liste.php", $langs->trans("List"), 1, $user->rights->categorie->lire); + //if (empty($leftmenu) || $leftmenu=="cat") $newmenu->add("/categories/liste.php", $langs->trans("List"), 1, $user->rights->categorie->lire); } $newmenu->add("/adherents/index.php?leftmenu=export&mainmenu=members",$langs->trans("Exports"),0,$user->rights->adherent->export, '', $mainmenu, 'export'); - if (! empty($conf->export->enabled) && $leftmenu=="export") $newmenu->add("/exports/index.php?leftmenu=export",$langs->trans("Datas"),1,$user->rights->adherent->export); - if ($leftmenu=="export") $newmenu->add("/adherents/htpasswd.php?leftmenu=export",$langs->trans("Filehtpasswd"),1,$user->rights->adherent->export); - if ($leftmenu=="export") $newmenu->add("/adherents/cartes/carte.php?leftmenu=export",$langs->trans("MembersCards"),1,$user->rights->adherent->export); + if (! empty($conf->export->enabled) && (empty($leftmenu) || $leftmenu=="export")) $newmenu->add("/exports/index.php?leftmenu=export",$langs->trans("Datas"),1,$user->rights->adherent->export); + if (empty($leftmenu) || $leftmenu=="export") $newmenu->add("/adherents/htpasswd.php?leftmenu=export",$langs->trans("Filehtpasswd"),1,$user->rights->adherent->export); + if (empty($leftmenu) || $leftmenu=="export") $newmenu->add("/adherents/cartes/carte.php?leftmenu=export",$langs->trans("MembersCards"),1,$user->rights->adherent->export); // Type $newmenu->add("/adherents/type.php?leftmenu=setup&mainmenu=members",$langs->trans("MembersTypes"),0,$user->rights->adherent->configurer, '', $mainmenu, 'setup'); diff --git a/htdocs/core/menus/standard/eldy_menu.php b/htdocs/core/menus/standard/eldy_menu.php index f920a905983..eb050232366 100644 --- a/htdocs/core/menus/standard/eldy_menu.php +++ b/htdocs/core/menus/standard/eldy_menu.php @@ -136,32 +136,36 @@ class MenuManager foreach($this->menu->liste as $key => $val) // $val['url','titre','level','enabled'=0|1|2,'target','mainmenu','leftmenu' { print '
    '; - print '
  • '; + print '
  • '; if ($val['enabled'] == 1) { $relurl=dol_buildpath($val['url'],1); print ''.$val['titre'].''."\n"; - + // Search submenu fot this entry + $tmpmainmenu=$val['mainmenu']; + $tmpleftmenu='all'; $submenu=new Menu(); - $res=print_left_eldy_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$submenu,1,$val['mainmenu'],$val['leftmenu']); + $res=print_left_eldy_menu($this->db,$this->menu_array,$this->menu_array_after,$this->tabMenu,$submenu,1,$tmpmainmenu,$tmpleftmenu); $nexturl=dol_buildpath($submenu->liste[0]['url'],1); $canonrelurl=preg_replace('/\?.*$/','',$relurl); $canonnexturl=preg_replace('/\?.*$/','',$nexturl); //var_dump($canonrelurl); //var_dump($canonnexturl); + print ''; } if ($val['enabled'] == 2) { @@ -169,7 +173,6 @@ class MenuManager } print '
  • '; print '
'."\n"; - print 'wwwwwww'; } } diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index c3e3d58d5e6..665f58b0b89 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -2519,6 +2519,39 @@ div.dolEventError h1, div.dolEventError h2 { } + + +/* ============================================================================== */ +/* JMobile */ +/* ============================================================================== */ + +.ui-body-c .ui-link { + color: #111 !important; +} +.ui-li-divider { + background: #eee !important; +} +.ui-bar-b { + border: 1px solid #ccc !important; + background: #aaa !important; + font-weight: bold !important; + color: #444 !important; + text-shadow: 0 1px 1px #fff !important; + background-image: -webkit-gradient(linear,left top,left bottom,from(#fdfdfd),to(#aaa)) !important; + background-image: -webkit-linear-gradient(top,#fdfdfd,#aaa) !important; + background-image: -moz-linear-gradient(top,#fdfdfd,#aaa) !important; + background-image: -ms-linear-gradient(top,#fdfdfd,#aaa) !important; + background-image: -o-linear-gradient(top,#fdfdfd,#aaa) !important; + background-image: linear-gradient(top,#fdfdfd,#aaa) !important; +} +.ui-bar-b .ui-link { + border: none; + font-weight: bold !important; + color: #444 !important; + text-shadow: 0 1px 1px #fff !important; +} + + close(); ?> From 33a82c396eca23d4ebc236fd914188b32f0b212a Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 26 Mar 2013 17:12:00 +0100 Subject: [PATCH 07/20] Fix: broken feature for use hooks with dol_move_uploaded_file method --- htdocs/core/class/fileupload.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/fileupload.class.php b/htdocs/core/class/fileupload.class.php index 8afb5f39f42..c5e83017940 100644 --- a/htdocs/core/class/fileupload.class.php +++ b/htdocs/core/class/fileupload.class.php @@ -436,7 +436,7 @@ class FileUpload { file_put_contents($file_path, fopen($uploaded_file, 'r'), FILE_APPEND); } else { - dol_move_uploaded_file($uploaded_file, $file_path, 1); + dol_move_uploaded_file($uploaded_file, $file_path, 1, 0, 0, 0, 'userfile'); } } else From dff74667c275e24669f031e3d4a986a5e5dbd848 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 26 Mar 2013 17:29:40 +0100 Subject: [PATCH 08/20] Fix: broken features due to the removal of the trigger FILE_UPLOAD ! --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index c257b00e56d..d95bd707868 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -663,7 +663,7 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disable } $hookmanager->initHooks(array('fileslib')); - $parameters=array('filename' => $file_name, 'varfiles' => $varfiles, 'allowoverwrite' => $allowoverwrite); + $parameters=array('src_file' => $src_file, 'file_name' => $file_name, 'varfiles' => $varfiles, 'allowoverwrite' => $allowoverwrite); $reshook=$hookmanager->executeHooks('moveUploadedFile', $parameters, $object); } From 4fe94b800bea6baa9dfe57e0cb635030e3275705 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 26 Mar 2013 17:43:48 +0100 Subject: [PATCH 09/20] Fix: missing parameter --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index d95bd707868..7557fa8322d 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -663,7 +663,7 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disable } $hookmanager->initHooks(array('fileslib')); - $parameters=array('src_file' => $src_file, 'file_name' => $file_name, 'varfiles' => $varfiles, 'allowoverwrite' => $allowoverwrite); + $parameters=array('dest_files' => $dest_files, 'src_file' => $src_file, 'file_name' => $file_name, 'varfiles' => $varfiles, 'allowoverwrite' => $allowoverwrite); $reshook=$hookmanager->executeHooks('moveUploadedFile', $parameters, $object); } From a701cbd77c97745ad540fcb2f724fca1f90d1503 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Tue, 26 Mar 2013 17:47:37 +0100 Subject: [PATCH 10/20] Fix: wrong var name --- htdocs/core/lib/files.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/files.lib.php b/htdocs/core/lib/files.lib.php index 7557fa8322d..d083751d819 100644 --- a/htdocs/core/lib/files.lib.php +++ b/htdocs/core/lib/files.lib.php @@ -663,7 +663,7 @@ function dol_move_uploaded_file($src_file, $dest_file, $allowoverwrite, $disable } $hookmanager->initHooks(array('fileslib')); - $parameters=array('dest_files' => $dest_files, 'src_file' => $src_file, 'file_name' => $file_name, 'varfiles' => $varfiles, 'allowoverwrite' => $allowoverwrite); + $parameters=array('dest_file' => $dest_file, 'src_file' => $src_file, 'file_name' => $file_name, 'varfiles' => $varfiles, 'allowoverwrite' => $allowoverwrite); $reshook=$hookmanager->executeHooks('moveUploadedFile', $parameters, $object); } From c36f52c47a08a6ed5019fa4f53ec0371f554e8df Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 27 Mar 2013 11:54:10 +0100 Subject: [PATCH 11/20] Fix: avoid errors due to BROKEN FEATURES !!! --- htdocs/main.inc.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index cd5e3e32770..39acc88fd5c 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1020,6 +1020,7 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs print ''."\n"; } // jQuery File Upload + /* if (! empty($conf->global->MAIN_USE_JQUERY_FILEUPLOAD) || (defined('REQUIRE_JQUERY_FILEUPLOAD') && constant('REQUIRE_JQUERY_FILEUPLOAD'))) { print ''."\n"; @@ -1031,6 +1032,7 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs print ''."\n"; print ''."\n"; } + */ // jQuery DataTables if (! empty($conf->global->MAIN_USE_JQUERY_DATATABLES) || (defined('REQUIRE_JQUERY_DATATABLES') && constant('REQUIRE_JQUERY_DATATABLES'))) { From 1f537300ea11e8c85a2c3d89015cd75834d53179 Mon Sep 17 00:00:00 2001 From: jfefe Date: Wed, 27 Mar 2013 19:11:42 +0100 Subject: [PATCH 12/20] Add hidden option MAIN_PROPAL_CHOOSE_ODT_DOCUMENT to enable choice of ODT document to use according to his status --- .../doc/doc_generic_proposal_odt.modules.php | 54 ++++++++++--------- 1 file changed, 30 insertions(+), 24 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 959d9b29cd9..0878e4da181 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 @@ -106,9 +106,12 @@ class doc_generic_proposal_odt extends ModelePDFPropales $texte.= ''; $texte.= ''; $texte.= ''; - $texte.= ''; - $texte.= ''; - $texte.= ''; + if ($conf->global->MAIN_PROPAL_CHOOSE_ODT_DOCUMENT > 0) + { + $texte.= ''; + $texte.= ''; + $texte.= ''; + } $texte.= ''; // List of directories area @@ -150,27 +153,30 @@ class doc_generic_proposal_odt extends ModelePDFPropales { $texte.=$langs->trans("NumberOfModelFilesFound").': '.count($listoffiles).''; - // Model for creation - $liste=ModelePDFPropales::liste_modeles($this->db); - $texte.= '
'; - $texte.= ''; - $texte.= ''; - $texte.= '"; - - $texte.= ''; - $texte.= ''; - $texte.= '"; - $texte.= ''; - - $texte.= ''; - $texte.= '"; - $texte.= '
'.$langs->trans("DefaultModelPropalCreate").''; - $texte.= $form->selectarray('value2',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_DEFAULT); - $texte.= "
'.$langs->trans("DefaultModelPropalToBill").''; - $texte.= $form->selectarray('value3',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_TOBILL); - $texte.= "
'.$langs->trans("DefaultModelPropalClosed").''; - $texte.= $form->selectarray('value4',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED); - $texte.= "
'; + if ($conf->global->MAIN_PROPAL_CHOOSE_ODT_DOCUMENT > 0) + { + // Model for creation + $liste=ModelePDFPropales::liste_modeles($this->db); + $texte.= ''; + $texte.= ''; + $texte.= ''; + $texte.= '"; + + $texte.= ''; + $texte.= ''; + $texte.= '"; + $texte.= ''; + + $texte.= ''; + $texte.= '"; + $texte.= '
'.$langs->trans("DefaultModelPropalCreate").''; + $texte.= $form->selectarray('value2',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_DEFAULT); + $texte.= "
'.$langs->trans("DefaultModelPropalToBill").''; + $texte.= $form->selectarray('value3',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_TOBILL); + $texte.= "
'.$langs->trans("DefaultModelPropalClosed").''; + $texte.= $form->selectarray('value4',$liste,$conf->global->PROPALE_ADDON_PDF_ODT_CLOSED); + $texte.= "
'; + } } From 1f5987b379a232498f504f1fc8cd8f7c4692dc77 Mon Sep 17 00:00:00 2001 From: jfefe Date: Wed, 27 Mar 2013 19:13:50 +0100 Subject: [PATCH 13/20] Fix trad & add english --- htdocs/langs/en_US/propal.lang | 3 +++ htdocs/langs/fr_FR/propal.lang | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/htdocs/langs/en_US/propal.lang b/htdocs/langs/en_US/propal.lang index 197a9f52146..a5f01c3e884 100644 --- a/htdocs/langs/en_US/propal.lang +++ b/htdocs/langs/en_US/propal.lang @@ -96,3 +96,6 @@ TypeContact_propal_external_CUSTOMER=Customer contact following-up proposal # Document models DocModelAzurDescription=A complete proposal model (logo...) DocModelJauneDescription=Jaune proposal model +DefaultModelPropalCreate=Default model creation +DefaultModelPropalToBill=Default template when closing a business proposal (to be invoiced) +DefaultModelPropalClosed=Default template when closing a business proposal (unbilled) diff --git a/htdocs/langs/fr_FR/propal.lang b/htdocs/langs/fr_FR/propal.lang index 5d5d1b2043c..5a52f3b442b 100644 --- a/htdocs/langs/fr_FR/propal.lang +++ b/htdocs/langs/fr_FR/propal.lang @@ -98,6 +98,6 @@ DocModelAzurDescription=Modèle de propositions commerciales complet (logo...) DocModelJauneDescription=Modèle de proposition Jaune Numbershort=N° DefaultModelPropalCreate=Modèle par défaut à la création -DefaultModelPropalToBill=Modèle lors de la cloture d'une proposition commerciale (à facturer) -DefaultModelPropalClosed=Modèle lors de la cloture d'une proposition commerciale (non facturée) +DefaultModelPropalToBill=Modèle par défaut lors de la cloture d'une proposition commerciale (à facturer) +DefaultModelPropalClosed=Modèle par défaut lors de la cloture d'une proposition commerciale (non facturée) From 55757a6b82ef5578d53dbc337e47c6544d05bf62 Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 27 Mar 2013 20:42:55 +0100 Subject: [PATCH 14/20] Fix: $i is global --- htdocs/core/boxes/box_activity.php | 23 +++++++---------------- htdocs/core/boxes/modules_boxes.php | 2 +- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/htdocs/core/boxes/box_activity.php b/htdocs/core/boxes/box_activity.php index 1977e41970a..87e555958e8 100644 --- a/htdocs/core/boxes/box_activity.php +++ b/htdocs/core/boxes/box_activity.php @@ -41,18 +41,9 @@ class box_activity extends ModeleBoxes var $info_box_head = array(); var $info_box_contents = array(); - /** - * Constructor - */ - function __construct($db) - { - $this->db = $db; - - $this->enabled = 1; - // FIXME: Use a cache to save data because this slow down too much main home page. This box slow down too seriously software. - // FIXME: Removed number_format (not compatible with all languages) - // FIXME: Pb into some status - } + // FIXME: Use a cache to save data because this slow down too much main home page. This box slow down too seriously software. + // FIXME: Removed number_format (not compatible with all languages) + // FIXME: Pb into some status /** * Charge les donnees en memoire pour affichage ulterieur @@ -66,6 +57,7 @@ class box_activity extends ModeleBoxes $totalMnt = 0; $totalnb = 0; + $i = 0; include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; @@ -99,7 +91,6 @@ class box_activity extends ModeleBoxes if ($result) { $num = $db->num_rows($result); - $i = 0; while ($i < $num) { $this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"', 'logo' => 'bill'); @@ -140,7 +131,7 @@ class box_activity extends ModeleBoxes $result = $db->query($sql); if ($result) { - $num = $db->num_rows($result)+$i; + $num = $db->num_rows($result) + $i; $now=dol_now(); while ($i < $num) @@ -195,7 +186,7 @@ class box_activity extends ModeleBoxes if ($result) { - $num = $db->num_rows($result)+$i; + $num = $db->num_rows($result) + $i; while ($i < $num) { $this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"','logo' => 'object_order'); @@ -246,7 +237,7 @@ class box_activity extends ModeleBoxes if ($result) { - $num = $db->num_rows($result)+$i; + $num = $db->num_rows($result) + $i; while ($i < $num) { $this->info_box_contents[$i][0] = array('td' => 'align="left" width="16"','logo' => 'object_propal'); diff --git a/htdocs/core/boxes/modules_boxes.php b/htdocs/core/boxes/modules_boxes.php index ad901b42ca9..7ca1b1dd4a2 100644 --- a/htdocs/core/boxes/modules_boxes.php +++ b/htdocs/core/boxes/modules_boxes.php @@ -33,7 +33,7 @@ class ModeleBoxes // Can't be abtract as it is instanciated to build "empty" var $error=''; var $max=5; var $enabled=1; - + var $rowid; var $id; var $position; From 0a3b7e79940bbffe556946d0198aab863a8944f3 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 27 Mar 2013 20:43:28 +0100 Subject: [PATCH 15/20] New: Be able to get path of image without tag img --- htdocs/core/lib/functions.lib.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 835e5a36ee1..edc39c6d164 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -1640,10 +1640,11 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='UTF-8',$nodo * Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1) * @param string $options Add more attribute on img tag (For example 'style="float: right"') * @param int $pictoisfullpath If 1, image path is a full path + * @param int $srconly Return only content of the src attribute of img. * @return string Return img tag * @see #img_object, #img_picto_common */ -function img_picto($alt, $picto, $options = '', $pictoisfullpath = false) +function img_picto($alt, $picto, $options = '', $pictoisfullpath = false, $srconly=0) { global $conf; @@ -1678,7 +1679,8 @@ function img_picto($alt, $picto, $options = '', $pictoisfullpath = false) $fullpathpicto = $url.'/'.$path.'/img/'.$picto; } - return ''.dol_escape_htmltag($alt).''; + if ($srconly) return $fullpathpicto; + else return ''.dol_escape_htmltag($alt).''; } /** From 0108ee2bd8e66f2d4f6af20ad45eb51837fb0554 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 27 Mar 2013 20:48:57 +0100 Subject: [PATCH 16/20] Fix: Bad name of function --- htdocs/install/etape5.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/install/etape5.php b/htdocs/install/etape5.php index 4f7803c9786..499cc844db9 100644 --- a/htdocs/install/etape5.php +++ b/htdocs/install/etape5.php @@ -233,7 +233,7 @@ if ($action == "set" || empty($action) || preg_match('/upgrade/i',$action)) dolibarr_install_syslog('install/etape5.php Activate module file='.$file); $res=dol_include_once("/core/modules/".$file); - $res=Activate($modtoactivatenew,1); + $res=activateModule($modtoactivatenew,1); if (! $result) print 'ERROR in activating module file='.$file; } } From 013eac1147c7acd3caa4f1850a77d5579eb29c46 Mon Sep 17 00:00:00 2001 From: jfefe Date: Wed, 27 Mar 2013 21:24:45 +0100 Subject: [PATCH 17/20] Better error management when add/update extrafield Usage of setEventMessage() function --- .../adherents/admin/adherent_extrafields.php | 2 -- .../admin/adherent_type_extrafields.php | 2 -- htdocs/admin/agenda_extrafields.php | 2 -- htdocs/comm/admin/propal_extrafields.php | 2 -- .../admin/facture_cust_extrafields.php | 2 -- htdocs/core/admin_extrafields.inc.php | 28 ++++++++++++++----- htdocs/societe/admin/contact_extrafields.php | 2 -- htdocs/societe/admin/societe_extrafields.php | 2 -- htdocs/user/admin/user_extrafields.php | 2 -- 9 files changed, 21 insertions(+), 23 deletions(-) diff --git a/htdocs/adherents/admin/adherent_extrafields.php b/htdocs/adherents/admin/adherent_extrafields.php index ef104cab883..b0996ba457d 100755 --- a/htdocs/adherents/admin/adherent_extrafields.php +++ b/htdocs/adherents/admin/adherent_extrafields.php @@ -76,8 +76,6 @@ dol_fiche_head($head, 'attributes', $langs->trans("Member"), 0, 'user'); print $langs->trans("DefineHereComplementaryAttributes",$textobject).'
'."\n"; print '
'; -dol_htmloutput_errors($mesg); - // Load attribute_label $extrafields->fetch_name_optionals_label($elementtype); diff --git a/htdocs/adherents/admin/adherent_type_extrafields.php b/htdocs/adherents/admin/adherent_type_extrafields.php index 6afc89e7498..6048bb684ef 100644 --- a/htdocs/adherents/admin/adherent_type_extrafields.php +++ b/htdocs/adherents/admin/adherent_type_extrafields.php @@ -77,8 +77,6 @@ dol_fiche_head($head, 'attributes_type', $langs->trans("Member"), 0, 'user'); print $langs->trans("DefineHereComplementaryAttributes",$textobject).'
'."\n"; print '
'; -dol_htmloutput_errors($mesg); - // Load attribute_label $extrafields->fetch_name_optionals_label($elementtype); diff --git a/htdocs/admin/agenda_extrafields.php b/htdocs/admin/agenda_extrafields.php index 26bd6c8f5ee..901ddfa2148 100644 --- a/htdocs/admin/agenda_extrafields.php +++ b/htdocs/admin/agenda_extrafields.php @@ -78,8 +78,6 @@ dol_fiche_head($head, 'attributes', $langs->trans("Agenda")); print $langs->trans("DefineHereComplementaryAttributes",$textobject).'
'."\n"; print '
'; -dol_htmloutput_errors($mesg); - // Load attribute_label $extrafields->fetch_name_optionals_label($elementtype); diff --git a/htdocs/comm/admin/propal_extrafields.php b/htdocs/comm/admin/propal_extrafields.php index 9993019775e..26667c83669 100755 --- a/htdocs/comm/admin/propal_extrafields.php +++ b/htdocs/comm/admin/propal_extrafields.php @@ -76,8 +76,6 @@ dol_fiche_head($head, 'attributes', $langs->trans("Propal"), 0, 'propal'); print $langs->trans("DefineHereComplementaryAttributes",$textobject).'
'."\n"; print '
'; -dol_htmloutput_errors($mesg); - // Load attribute_label $extrafields->fetch_name_optionals_label($elementtype); diff --git a/htdocs/compta/facture/admin/facture_cust_extrafields.php b/htdocs/compta/facture/admin/facture_cust_extrafields.php index d08d5fe0ba8..57f4be119e6 100644 --- a/htdocs/compta/facture/admin/facture_cust_extrafields.php +++ b/htdocs/compta/facture/admin/facture_cust_extrafields.php @@ -77,8 +77,6 @@ dol_fiche_head($head, 'attributes', $langs->trans("Invoices"), 0, 'invoice'); print $langs->trans("DefineHereComplementaryAttributes",$textobject).'
'."\n"; -dol_htmloutput_errors($mesg); - // Load attribute_label $extrafields->fetch_name_optionals_label($elementtype); diff --git a/htdocs/core/admin_extrafields.inc.php b/htdocs/core/admin_extrafields.inc.php index 975fa94d308..43b04a83a9a 100644 --- a/htdocs/core/admin_extrafields.inc.php +++ b/htdocs/core/admin_extrafields.inc.php @@ -41,7 +41,7 @@ if ($action == 'add') { $error++; $langs->load("errors"); - $mesg=$langs->trans("ErrorFieldRequired",$langs->trans("Type")); + $mesg[]=$langs->trans("ErrorFieldRequired",$langs->trans("Type")); $action = 'create'; } @@ -49,21 +49,21 @@ if ($action == 'add') { $error++; $langs->load("errors"); - $mesg=$langs->trans("ErrorSizeTooLongForVarcharType",$maxsizestring); + $mesg[]=$langs->trans("ErrorSizeTooLongForVarcharType",$maxsizestring); $action = 'create'; } if (GETPOST('type')=='int' && $extrasize > $maxsizeint) { $error++; $langs->load("errors"); - $mesg=$langs->trans("ErrorSizeTooLongForIntType",$maxsizeint); + $mesg[]=$langs->trans("ErrorSizeTooLongForIntType",$maxsizeint); $action = 'create'; } if (GETPOST('type')=='select' && !GETPOST('param')) { $error++; $langs->load("errors"); - $mesg=$langs->trans("ErrorNoValueForSelectType"); + $mesg[]=$langs->trans("ErrorNoValueForSelectType"); $action = 'create'; } @@ -84,6 +84,7 @@ if ($action == 'add') $result=$extrafields->addExtraField($_POST['attrname'],$_POST['label'],$_POST['type'],$_POST['pos'],$extrasize,$elementtype,(GETPOST('unique')?1:0),(GETPOST('required')?1:0),$default_value,$params); if ($result > 0) { + setEventMessage($langs->trans('SetupSaved')); header("Location: ".$_SERVER["PHP_SELF"]); exit; } @@ -91,6 +92,7 @@ if ($action == 'add') { $error++; $mesg=$extrafields->error; + setEventMessage($mesg,'error'); } } else @@ -98,9 +100,14 @@ if ($action == 'add') $error++; $langs->load("errors"); $mesg=$langs->trans("ErrorFieldCanNotContainSpecialCharacters",$langs->transnoentities("AttributeCode")); + setEventMessage($mesg,'error'); $action = 'create'; } } + else + { + setEventMessage($mesg,'errors'); + } } } @@ -114,21 +121,21 @@ if ($action == 'update') { $error++; $langs->load("errors"); - $mesg=$langs->trans("ErrorFieldRequired",$langs->trans("Type")); + $mesg[]=$langs->trans("ErrorFieldRequired",$langs->trans("Type")); $action = 'create'; } if (GETPOST('type')=='varchar' && $extrasize > $maxsizestring) { $error++; $langs->load("errors"); - $mesg=$langs->trans("ErrorSizeTooLongForVarcharType",$maxsizestring); + $mesg[]=$langs->trans("ErrorSizeTooLongForVarcharType",$maxsizestring); $action = 'edit'; } if (GETPOST('type')=='int' && $extrasize > $maxsizeint) { $error++; $langs->load("errors"); - $mesg=$langs->trans("ErrorSizeTooLongForIntType",$maxsizeint); + $mesg[]=$langs->trans("ErrorSizeTooLongForIntType",$maxsizeint); $action = 'edit'; } @@ -148,6 +155,7 @@ if ($action == 'update') $result=$extrafields->update($_POST['attrname'],$_POST['label'],$_POST['type'],$extrasize,$elementtype,(GETPOST('unique')?1:0),(GETPOST('required')?1:0),$pos,$params); if ($result > 0) { + setEventMessage($langs->trans('SetupSaved')); header("Location: ".$_SERVER["PHP_SELF"]); exit; } @@ -155,6 +163,7 @@ if ($action == 'update') { $error++; $mesg=$extrafields->error; + setEventMessage($mesg,'errors'); } } else @@ -162,8 +171,13 @@ if ($action == 'update') $error++; $langs->load("errors"); $mesg=$langs->trans("ErrorFieldCanNotContainSpecialCharacters",$langs->transnoentities("AttributeCode")); + setEventMessage($mesg,'errors'); } } + else + { + setEventMessage($mesg,'errors'); + } } } diff --git a/htdocs/societe/admin/contact_extrafields.php b/htdocs/societe/admin/contact_extrafields.php index 892e6318dca..a2460c6cda4 100755 --- a/htdocs/societe/admin/contact_extrafields.php +++ b/htdocs/societe/admin/contact_extrafields.php @@ -76,8 +76,6 @@ dol_fiche_head($head, 'attributes_contacts', $langs->trans("ThirdParties"), 0, ' print $langs->trans("DefineHereComplementaryAttributes",$textobject).'
'."\n"; print '
'; -dol_htmloutput_errors($mesg); - // Load attribute_label $extrafields->fetch_name_optionals_label($elementtype); diff --git a/htdocs/societe/admin/societe_extrafields.php b/htdocs/societe/admin/societe_extrafields.php index 4ad507dc468..11cb02e80ae 100755 --- a/htdocs/societe/admin/societe_extrafields.php +++ b/htdocs/societe/admin/societe_extrafields.php @@ -77,8 +77,6 @@ dol_fiche_head($head, 'attributes', $langs->trans("ThirdParties"), 0, 'company') print $langs->trans("DefineHereComplementaryAttributes",$textobject).'
'."\n"; print '
'; -dol_htmloutput_errors($mesg); - // Load attribute_label $extrafields->fetch_name_optionals_label($elementtype); diff --git a/htdocs/user/admin/user_extrafields.php b/htdocs/user/admin/user_extrafields.php index b9b1cd9811e..8b4bc780cbf 100644 --- a/htdocs/user/admin/user_extrafields.php +++ b/htdocs/user/admin/user_extrafields.php @@ -76,8 +76,6 @@ dol_fiche_head($head, 'attributes', $langs->trans("User"), 0, 'user'); print $langs->trans("DefineHereComplementaryAttributes",$textobject).'
'."\n"; print '
'; -dol_htmloutput_errors($mesg); - // Load attribute_label $extrafields->fetch_name_optionals_label($elementtype); From ed2b359dae523fc62c5066e06e44d0911017c0e6 Mon Sep 17 00:00:00 2001 From: jfefe Date: Thu, 28 Mar 2013 06:48:21 +0100 Subject: [PATCH 18/20] Bad parameter when calling setEventMessage function --- htdocs/core/admin_extrafields.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/admin_extrafields.inc.php b/htdocs/core/admin_extrafields.inc.php index 43b04a83a9a..ea4f26c8509 100644 --- a/htdocs/core/admin_extrafields.inc.php +++ b/htdocs/core/admin_extrafields.inc.php @@ -92,7 +92,7 @@ if ($action == 'add') { $error++; $mesg=$extrafields->error; - setEventMessage($mesg,'error'); + setEventMessage($mesg,'errors'); } } else @@ -100,7 +100,7 @@ if ($action == 'add') $error++; $langs->load("errors"); $mesg=$langs->trans("ErrorFieldCanNotContainSpecialCharacters",$langs->transnoentities("AttributeCode")); - setEventMessage($mesg,'error'); + setEventMessage($mesg,'errors'); $action = 'create'; } } From c2be118efdaa1ad5f1c754254ea903450a1e5378 Mon Sep 17 00:00:00 2001 From: fhenry Date: Thu, 28 Mar 2013 20:51:00 +0100 Subject: [PATCH 19/20] Add more information in ODT project template --- .../pdf/doc_generic_project_odt.modules.php | 198 +++++++++++++++++- .../doctemplates/project/template_project.odt | Bin 28586 -> 0 bytes .../project/template_task_summary.odt | Bin 15625 -> 0 bytes .../projects/template_project.odt | Bin 0 -> 29375 bytes .../projects/template_task_summary.odt | Bin 0 -> 19309 bytes htdocs/install/etape1.php | 2 +- 6 files changed, 196 insertions(+), 4 deletions(-) delete mode 100755 htdocs/install/doctemplates/project/template_project.odt delete mode 100755 htdocs/install/doctemplates/project/template_task_summary.odt create mode 100755 htdocs/install/doctemplates/projects/template_project.odt create mode 100755 htdocs/install/doctemplates/projects/template_task_summary.odt diff --git a/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php b/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php index a1aa87366d9..34cd23a0a7f 100644 --- a/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php +++ b/htdocs/core/modules/project/pdf/doc_generic_project_odt.modules.php @@ -34,6 +34,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/doc.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; if (! empty($conf->propal->enabled)) require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php'; if (! empty($conf->facture->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php'; if (! empty($conf->facture->enabled)) require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture-rec.class.php'; @@ -151,7 +152,9 @@ class doc_generic_project_odt extends ModelePDFProjects 'task_progress'=>$task->progress, 'task_public'=>$task->public, 'task_date_start'=>dol_print_date($task->date_start,'day'), - 'task_date_end'=>dol_print_date($task->date_end,'day') + 'task_date_end'=>dol_print_date($task->date_end,'day'), + 'task_note_private'=>$task->note_private, + 'task_note_public'=>$task->note_public ); } @@ -218,6 +221,68 @@ class doc_generic_project_odt extends ModelePDFProjects ); } + /** + * Define array with couple substitution key => substitution value + * + * @param array $taskressource Reference array + * @param Translate $outputlangs Lang object to use for output + * @return array Return a substitution array + */ + function get_substitutionarray_tasksressource($taskressource,$outputlangs) + { + global $conf; + //dol_syslog(get_class($this).'::get_substitutionarray_tasksressource taskressource='.var_export($taskressource,true),LOG_DEBUG); + return array( + 'taskressource_rowid'=>$taskressource['rowid'], + 'taskressource_role'=>$taskressource['libelle'], + 'taskressource_lastname'=>$taskressource['lastname'], + 'taskressource_firstname'=>$taskressource['firstname'], + 'taskressource_fullcivname'=>$taskressource['fullname'], + 'taskressource_socname'=>$taskressource['socname'], + 'taskressource_email'=>$taskressource['email'] + ); + } + + /** + * Define array with couple substitution key => substitution value + * + * @param object $tasktime times object + * @param Translate $outputlangs Lang object to use for output + * @return array Return a substitution array + */ + function get_substitutionarray_taskstime($tasktime,$outputlangs) + { + global $conf; + + return array( + 'tasktime_rowid'=>$tasktime['rowid'], + 'tasktime_task_date'=>dol_print_date($tasktime['task_date'],'day'), + 'tasktime_task_duration'=>convertSecondToTime($tasktime['task_duration'],'all'), + 'tasktime_note'=>$tasktime['note'], + 'tasktime_fk_user'=>$tasktime['fk_user'], + 'tasktime_user_name'=>$tasktime['name'], + 'tasktime_user_first'=>$tasktime['firstname'], + 'tasktime_fullcivname'=>$tasktime['fullcivname'] + ); + } + + /** + * Define array with couple substitution key => substitution value + * + * @param array $file file array + * @param Translate $outputlangs Lang object to use for output + * @return array Return a substitution array + */ + function get_substitutionarray_task_file($file,$outputlangs) + { + global $conf; + + return array( + 'tasksfile_name'=>$file['name'], + 'tasksfile_date'=>dol_print_date($file['date'],'day'), + 'tasksfile_size'=>$file['size'] + ); + } /** @@ -519,6 +584,134 @@ class doc_generic_project_odt extends ModelePDFProjects { } } + + $taskobj=new Task($this->db); + $taskobj->fetch($task->id); + + // Replace tags of lines for contacts task + $sourcearray=array('internal','external'); + $contact_arrray=array(); + foreach ($sourcearray as $source) { + $contact_temp=$taskobj->liste_contact(-1,$source); + if ((is_array($contact_temp) && count($contact_temp) > 0)) + { + $contact_arrray=array_merge($contact_arrray,$contact_temp); + } + } + if ((is_array($contact_arrray) && count($contact_arrray) > 0)) + { + $listlinestaskres = $listlines->__get('tasksressources'); + + foreach ($contact_arrray as $contact) + { + if ($contact['source']=='internal') { + $objectdetail=new User($this->db); + $objectdetail->fetch($contact['id']); + $contact['socname']=$mysoc->name; + } elseif ($contact['source']=='external') { + $objectdetail=new Contact($this->db); + $objectdetail->fetch($contact['id']); + + $soc=new Societe($this->db); + $soc->fetch($contact['socid']); + $contact['socname']=$soc->name; + } + $contact['fullname']=$objectdetail->getFullName($outputlangs,1); + + $tmparray=$this->get_substitutionarray_tasksressource($contact,$outputlangs); + + foreach($tmparray as $key => $val) + { + try + { + $listlinestaskres->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listlinestaskres->merge(); + } + } + + //Time ressources + $sql = "SELECT t.rowid, t.task_date, t.task_duration, t.fk_user, t.note"; + $sql.= ", u.name, u.firstname"; + $sql .= " FROM ".MAIN_DB_PREFIX."projet_task_time as t"; + $sql .= " , ".MAIN_DB_PREFIX."user as u"; + $sql .= " WHERE t.fk_task =".$task->id; + $sql .= " AND t.fk_user = u.rowid"; + $sql .= " ORDER BY t.task_date DESC"; + + $resql = $this->db->query($sql); + if ($resql) + { + $num = $this->db->num_rows($resql); + $i = 0; + $tasks = array(); + $listlinestasktime = $listlines->__get('taskstimes'); + while ($i < $num) + { + $row = $this->db->fetch_array($resql); + if (!empty($row['fk_user'])) { + $objectdetail=new User($this->db); + $objectdetail->fetch($row['fk_user']); + $row['fullcivname']=$objectdetail->getFullName($outputlangs,1); + } else { + $row['fullcivname']=''; + } + + $tmparray=$this->get_substitutionarray_taskstime($row,$outputlangs); + + foreach($tmparray as $key => $val) + { + try + { + $listlinestasktime->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listlinestasktime->merge(); + $i++; + } + $this->db->free($resql); + } + + + // Replace tags of project files + $listtasksfiles = $listlines->__get('tasksfiles'); + + $upload_dir = $conf->projet->dir_output.'/'.dol_sanitizeFileName($object->ref).'/'.dol_sanitizeFileName($task->ref); + $filearray=dol_dir_list($upload_dir,"files",0,'','\.meta$','name',SORT_ASC,1); + + + foreach ($filearray as $filedetail) + { + $tmparray=$this->get_substitutionarray_task_file($filedetail,$outputlangs); + //dol_syslog(get_class($this).'::main $tmparray'.var_export($tmparray,true)); + foreach($tmparray as $key => $val) + { + try + { + $listtasksfiles->setVars($key, $val, true, 'UTF-8'); + } + catch(OdfException $e) + { + } + catch(SegmentException $e) + { + } + } + $listtasksfiles->merge(); + } $listlines->merge(); } $odfHandler->mergeSegment($listlines); @@ -541,7 +734,7 @@ class doc_generic_project_odt extends ModelePDFProjects foreach ($filearray as $filedetail) { - //dol_syslog(get_class($this).'::ee $filedetail'.var_export($filedetail,true)); + //dol_syslog(get_class($this).'::main $filedetail'.var_export($filedetail,true)); $tmparray=$this->get_substitutionarray_project_file($filedetail,$outputlangs); foreach($tmparray as $key => $val) @@ -766,7 +959,6 @@ class doc_generic_project_odt extends ModelePDFProjects } // Write new file - //$result=$odfHandler->exportAsAttachedFile('toto'); $odfHandler->saveToDisk($file); if (! empty($conf->global->MAIN_UMASK)) diff --git a/htdocs/install/doctemplates/project/template_project.odt b/htdocs/install/doctemplates/project/template_project.odt deleted file mode 100755 index ff34277a48c52325be4902df3ed9b9a9bf6056ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28586 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 xeQ(PB2hd+h{jbLTN_oO#5%D~ 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 PHsq%O!d$mjcUS)hQNnij literal 0 HcmV?d00001 diff --git a/htdocs/install/doctemplates/projects/template_task_summary.odt b/htdocs/install/doctemplates/projects/template_task_summary.odt new file mode 100755 index 0000000000000000000000000000000000000000..84fbe00ccc9703adef642faa7412ea3648999d6c GIT binary patch literal 19309 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 literal 0 HcmV?d00001 diff --git a/htdocs/install/etape1.php b/htdocs/install/etape1.php index 1f48bf8efc0..24e56a7ecf0 100644 --- a/htdocs/install/etape1.php +++ b/htdocs/install/etape1.php @@ -400,7 +400,7 @@ if (! $error && $db->connected && $action == "set") require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $srcroot=$main_dir.'/install/doctemplates'; $destroot=$main_data_dir.'/doctemplates'; - $docs=array('thirdparties' => 'thirdparty', 'proposals' => 'proposal', 'orders' => 'order', 'invoices' => 'invoice', 'projects' => 'project'); + $docs=array('thirdparties' => 'thirdparty', 'proposals' => 'proposal', 'orders' => 'order', 'invoices' => 'invoice', 'projects' => 'project', 'projects' => 'task_summary'); foreach($docs as $cursordir => $cursorfile) { $src=$srcroot.'/'.$cursordir.'/template_'.$cursorfile.'.odt'; From e745cbb5cf9f5c50b22c8846be4092430b002c20 Mon Sep 17 00:00:00 2001 From: fhenry Date: Thu, 28 Mar 2013 22:13:04 +0100 Subject: [PATCH 20/20] Add missing column into llx_extrafield creation --- htdocs/install/mysql/tables/llx_extrafields.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/htdocs/install/mysql/tables/llx_extrafields.sql b/htdocs/install/mysql/tables/llx_extrafields.sql index 04ed6eba157..ba4c7df964f 100755 --- a/htdocs/install/mysql/tables/llx_extrafields.sql +++ b/htdocs/install/mysql/tables/llx_extrafields.sql @@ -22,12 +22,13 @@ create table llx_extrafields rowid integer AUTO_INCREMENT PRIMARY KEY, name varchar(64) NOT NULL, -- nom de l'attribut entity integer DEFAULT 1 NOT NULL, -- multi company id - elementtype varchar(64) NOT NULL DEFAULT 'member', + elementtype varchar(64) NOT NULL DEFAULT 'member', tms timestamp, label varchar(255) NOT NULL, -- label correspondant a l'attribut type varchar(8), size varchar(8) DEFAULT NULL, fieldunique integer DEFAULT 0, fieldrequired integer DEFAULT 0, - pos integer DEFAULT 0 + pos integer DEFAULT 0, + param text )ENGINE=innodb;