From 76efc0484011cdff3b63b46425602cc2a4679b3f Mon Sep 17 00:00:00 2001 From: jfefe Date: Wed, 13 Mar 2013 22:01:34 +0100 Subject: [PATCH 01/12] Show number with dot to avoid error when update extrafield --- htdocs/core/class/extrafields.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index de828e8a237..4e18cd6c983 100755 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -646,7 +646,7 @@ class ExtraFields } elseif ($type == 'price') { - $out=' '.$langs->getCurrencySymbol($conf->currency); + $out=' '.$langs->getCurrencySymbol($conf->currency); } elseif ($type == 'select') { From c53564c45470a09065d8d8f1e09cadbd97ca977c Mon Sep 17 00:00:00 2001 From: jfefe Date: Fri, 29 Mar 2013 14:03:39 +0100 Subject: [PATCH 02/12] For extrafield with date type show calendar instead basic input field --- htdocs/core/class/extrafields.class.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index ce94f2d33ba..b143091799d 100755 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -582,7 +582,7 @@ class ExtraFields * Return HTML string to put an input field into a page * * @param string $key Key of attribute - * @param string $value Value to show + * @param string $value Value to show (for date type it must be in timestamp format) * @param string $moreparam To add more parametes on html input tag * @return void */ @@ -619,7 +619,13 @@ class ExtraFields { $tmp=explode(',',$size); $newsize=$tmp[0]; - $out=''; + if(!class_exists('Form')) + require_once DOL_DOCUMENT_ROOT.'/core/class/html.form.class.php'; + $formstat = new Form($db); + + $showtime = in_array($type,array('datetime')) ? 1 : 0; + $out = $formstat->select_date($value, 'options_'.$key, $showtime, $showtime, $required, '', 1, 1, 0, 0, 1); + //$out=''; } elseif (in_array($type,array('int','double'))) { @@ -670,9 +676,10 @@ class ExtraFields } $out.=''; } - // Add comments + /* Add comments if ($type == 'date') $out.=' (YYYY-MM-DD)'; elseif ($type == 'datetime') $out.=' (YYYY-MM-DD HH:MM:SS)'; + */ return $out; } From 76ce938f61b85e81fed182f35b0a84f0410b5853 Mon Sep 17 00:00:00 2001 From: jfefe Date: Fri, 29 Mar 2013 14:09:47 +0100 Subject: [PATCH 03/12] When retrieve extrafields, loop on extralabels array instead of posted values Add support for calendar display on date extrafield --- htdocs/societe/soc.php | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/htdocs/societe/soc.php b/htdocs/societe/soc.php index 80de6ec7146..7761a13c469 100644 --- a/htdocs/societe/soc.php +++ b/htdocs/societe/soc.php @@ -55,6 +55,9 @@ if ($user->societe_id) $socid=$user->societe_id; $object = new Societe($db); $extrafields = new ExtraFields($db); +// fetch optionals attributes and labels +$extralabels=$extrafields->fetch_name_optionals_label('company'); + // Get object canvas (By default, this is not defined, so standard usage of dolibarr) $object->getCanvas($socid); $canvas = $object->canvas?$object->canvas:GETPOST("canvas"); @@ -167,14 +170,21 @@ if (empty($reshook)) $object->default_lang = GETPOST('default_lang'); // Get extra fields - foreach($_POST as $key => $value) + foreach ($extralabels as $key => $value) { - if (preg_match("/^options_/",$key)) - { - $object->array_options[$key]=GETPOST($key); - } + $key_type = $extrafields->attribute_type[$key]; + + if (in_array($key_type,array('date','datetime'))) + { + // Clean parameters + $value_key=dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]); + } + else + { + $value_key=GETPOST("options_".$key); + } + $object->array_options[$key]=$value_key; } - if (GETPOST('deletephoto')) $object->logo = ''; else if (! empty($_FILES['photo']['name'])) $object->logo = dol_sanitizeFileName($_FILES['photo']['name']); @@ -508,9 +518,6 @@ if (empty($reshook)) * View */ -// fetch optionals attributes and labels -$extralabels=$extrafields->fetch_name_optionals_label('company'); - $help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas'; llxHeader('',$langs->trans("ThirdParty"),$help_url); @@ -1000,6 +1007,13 @@ else if (! empty($extrafields->attribute_required[$key])) print ' class="fieldrequired"'; print '>'.$label.''; print ''; + + // Convert date into timestamp format + if (in_array($extrafields->attribute_type[$key],array('date','datetime'))) + { + $value = dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]); + } + print $extrafields->showInputField($key,$value); print ''; From c1e6de33eb2e723c35ef810a2c490282d6021b16 Mon Sep 17 00:00:00 2001 From: jfefe Date: Fri, 29 Mar 2013 14:37:29 +0100 Subject: [PATCH 04/12] Fix : bad definition of key for extrafields array --- htdocs/societe/soc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/societe/soc.php b/htdocs/societe/soc.php index 7761a13c469..e28f1a12443 100644 --- a/htdocs/societe/soc.php +++ b/htdocs/societe/soc.php @@ -183,7 +183,7 @@ if (empty($reshook)) { $value_key=GETPOST("options_".$key); } - $object->array_options[$key]=$value_key; + $object->array_options["options_".$key]=$value_key; } if (GETPOST('deletephoto')) $object->logo = ''; else if (! empty($_FILES['photo']['name'])) $object->logo = dol_sanitizeFileName($_FILES['photo']['name']); From 80f080f5a954ad2e109dbf5a06e51a5323f6a014 Mon Sep 17 00:00:00 2001 From: jfefe Date: Fri, 29 Mar 2013 14:45:40 +0100 Subject: [PATCH 05/12] Format date for sql query Using dol_print_date because db->idate doesn't work --- htdocs/core/class/commonobject.class.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 79a471a0251..b128455b8ff 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -2132,15 +2132,19 @@ abstract class CommonObject case 'price': $this->array_options[$key] = price2num($this->array_options[$key]); break; + case 'date': + $this->array_options[$key] = dol_print_date($this->array_options[$key],'dayrfc'); + break; + case 'datetime': + $this->array_options[$key] = dol_print_date($this->array_options[$key],'dayhourrfc'); + break; } - } - + } $this->db->begin(); $sql_del = "DELETE FROM ".MAIN_DB_PREFIX.$this->table_element."_extrafields WHERE fk_object = ".$this->id; dol_syslog(get_class($this)."::insertExtraFields delete sql=".$sql_del); $this->db->query($sql_del); - $sql = "INSERT INTO ".MAIN_DB_PREFIX.$this->table_element."_extrafields (fk_object"; foreach($this->array_options as $key => $value) { From 1a1aebf793bf6363585f4b5715ee1eabac0e270d Mon Sep 17 00:00:00 2001 From: jfefe Date: Fri, 29 Mar 2013 14:56:31 +0100 Subject: [PATCH 06/12] Display date extrafield with correct format --- htdocs/core/class/extrafields.class.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index b143091799d..4ddc38301bd 100755 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -705,10 +705,12 @@ class ExtraFields if ($type == 'date') { $showsize=10; + $value=dol_print_date($value,'day'); } elseif ($type == 'datetime') { $showsize=19; + $value=dol_print_date($value,'dayhour'); } elseif ($type == 'int') { From 6aae37493c0b4026f6c39ca8226a63d260ce4af2 Mon Sep 17 00:00:00 2001 From: jfefe Date: Fri, 29 Mar 2013 22:14:06 +0100 Subject: [PATCH 07/12] Add support of calendar on date type extrafield on propal --- htdocs/comm/propal.php | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index e35c8d2940d..08ec557e8f5 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -81,6 +81,9 @@ $result = restrictedArea($user, 'propal', $id); $object = new Propal($db); $extrafields = new ExtraFields($db); +// fetch optionals attributes and labels +$extralabels=$extrafields->fetch_name_optionals_label('propal'); + // Load object if ($id > 0 || ! empty($ref)) { @@ -339,12 +342,20 @@ else if ($action == 'add' && $user->rights->propal->creer) } // Get extra fields - foreach($_POST as $key => $value) + foreach ($extralabels as $key => $value) { - if (preg_match("/^options_/",$key)) + $key_type = $extrafields->attribute_type[$key]; + + if (in_array($key_type,array('date','datetime'))) { - $object->array_options[$key]=GETPOST($key); + // Clean parameters + $value_key=dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]); } + else + { + $value_key=GETPOST("options_".$key); + } + $object->array_options["options_".$key]=$value_key; } $id = $object->create($user); @@ -1108,13 +1119,22 @@ else if ($action == 'down' && $user->rights->propal->creer) else if ($action == 'update_extras') { // Get extra fields - foreach($_POST as $key => $value) + foreach ($extralabels as $key => $value) { - if (preg_match("/^options_/",$key)) + $key_type = $extrafields->attribute_type[$key]; + + if (in_array($key_type,array('date','datetime'))) { - $object->array_options[$key]=$_POST[$key]; + // Clean parameters + $value_key=dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]); } + else + { + $value_key=GETPOST("options_".$key); + } + $object->array_options["options_".$key]=$value_key; } + // Actions on extra fields (by external module or standard code) // FIXME le hook fait double emploi avec le trigger !! $hookmanager->initHooks(array('propaldao')); @@ -1208,9 +1228,6 @@ $formfile = new FormFile($db); $formpropal = new FormPropal($db); $companystatic=new Societe($db); -// fetch optionals attributes and labels -$extralabels=$extrafields->fetch_name_optionals_label('propal'); - $now=dol_now(); // Add new proposal From 649c1f3721e81b0aa18a49bf51c6f4a7deac9bcc Mon Sep 17 00:00:00 2001 From: jfefe Date: Fri, 29 Mar 2013 22:25:02 +0100 Subject: [PATCH 08/12] Try new function to set array_options to object (extrafields values) with date sent by forms --- htdocs/comm/propal.php | 20 ++----------- htdocs/core/class/extrafields.class.php | 37 +++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index 08ec557e8f5..cf2d6054dee 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -341,23 +341,9 @@ else if ($action == 'add' && $user->rights->propal->creer) } } - // Get extra fields - foreach ($extralabels as $key => $value) - { - $key_type = $extrafields->attribute_type[$key]; - - if (in_array($key_type,array('date','datetime'))) - { - // Clean parameters - $value_key=dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]); - } - else - { - $value_key=GETPOST("options_".$key); - } - $object->array_options["options_".$key]=$value_key; - } - + // Fill array 'array_options' with data from add form + $ret = setOptionalsFromPost($extralabels,$object);* + $id = $object->create($user); } diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 5b12672f6ce..ecd2c469fb1 100755 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -752,5 +752,42 @@ class ExtraFields $out = ''.$this->attribute_label[$key].''; return $out; } + + /** + * Fill array_options array for object by extrafields value (using for data send by forms) + * + * @param array $extralabels $array of extrafields + * @param object $object object + * @return int 1 if array_options set / 0 if no value + */ + function setOptionalsFromPost($extralabels,&$object) + { + global $_POST; + + if (is_array($extralabels)) + { + // Get extra fields + foreach ($extralabels as $key => $value) + { + $key_type = $this->attribute_type[$key]; + + if (in_array($key_type,array('date','datetime'))) + { + // Clean parameters + $value_key=dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]); + } + else + { + $value_key=GETPOST("options_".$key); + } + $object->array_options["options_".$key]=$value_key; + } + + return 1; + } + else { + return 0; + } + } } ?> From 6c872395e312c76f7898fc50ac481a601f395d46 Mon Sep 17 00:00:00 2001 From: jfefe Date: Fri, 29 Mar 2013 22:26:25 +0100 Subject: [PATCH 09/12] Fix: syntax error --- 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 cf2d6054dee..a2a20c6c6d0 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -342,7 +342,7 @@ else if ($action == 'add' && $user->rights->propal->creer) } // Fill array 'array_options' with data from add form - $ret = setOptionalsFromPost($extralabels,$object);* + $ret = setOptionalsFromPost($extralabels,$object); $id = $object->create($user); } From f3a7d497c6b02c06a5883cac831ed2065808a98d Mon Sep 17 00:00:00 2001 From: jfefe Date: Fri, 29 Mar 2013 22:30:07 +0100 Subject: [PATCH 10/12] Fix : missing object when calling function --- 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 a2a20c6c6d0..1f3ea7cd46f 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -342,7 +342,7 @@ else if ($action == 'add' && $user->rights->propal->creer) } // Fill array 'array_options' with data from add form - $ret = setOptionalsFromPost($extralabels,$object); + $ret = $extrafields->setOptionalsFromPost($extralabels,$object); $id = $object->create($user); } From e99ba51f1d01d50d75d516c072b912687ee5bbfd Mon Sep 17 00:00:00 2001 From: jfefe Date: Sat, 30 Mar 2013 10:46:23 +0100 Subject: [PATCH 11/12] Use of new function to set optionals from add / update form Format date display for data from JS calendar (date type extrafield) --- htdocs/comm/propal.php | 26 ++++++++++---------------- htdocs/compta/facture.php | 19 ++++++++++--------- htdocs/societe/soc.php | 19 +++---------------- 3 files changed, 23 insertions(+), 41 deletions(-) diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index 1f3ea7cd46f..7cf90691655 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -1104,22 +1104,9 @@ else if ($action == 'down' && $user->rights->propal->creer) } else if ($action == 'update_extras') { - // Get extra fields - foreach ($extralabels as $key => $value) - { - $key_type = $extrafields->attribute_type[$key]; - - if (in_array($key_type,array('date','datetime'))) - { - // Clean parameters - $value_key=dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]); - } - else - { - $value_key=GETPOST("options_".$key); - } - $object->array_options["options_".$key]=$value_key; - } + // Fill array 'array_options' with data from update form + $extralabels=$extrafields->fetch_name_optionals_label('propal'); + $ret = $extrafields->setOptionalsFromPost($extralabels,$object); // Actions on extra fields (by external module or standard code) // FIXME le hook fait double emploi avec le trigger !! @@ -1875,6 +1862,13 @@ else print 'attribute_required[$key])) print ' class="fieldrequired"'; print '>'.$label.''; + + // Convert date into timestamp format + if (in_array($extrafields->attribute_type[$key],array('date','datetime'))) + { + $value = isset($_POST["options_".$key])?dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]):$object->array_options['options_'.$key]; + } + if ($action == 'edit_extras' && $user->rights->propal->creer) { print $extrafields->showInputField($key,$value); diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 233ebaa4f32..935d475bb9e 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -1738,14 +1738,10 @@ if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $user->rights->facture- if ($action == 'update_extras') { - // Get extra fields - foreach($_POST as $key => $value) - { - if (preg_match("/^options_/",$key)) - { - $object->array_options[$key]=$_POST[$key]; - } - } + // Fill array 'array_options' with data from add form + $extralabels=$extrafields->fetch_name_optionals_label('facture'); + $ret = $extrafields->setOptionalsFromPost($extralabels,$object); + // Actions on extra fields (by external module or standard code) // FIXME le hook fait double emploi avec le trigger !! $hookmanager->initHooks(array('invoicedao')); @@ -3125,7 +3121,6 @@ else if ($id > 0 || ! empty($ref)) print ''; } - foreach($extrafields->attribute_label as $key=>$label) { $value=(isset($_POST["options_".$key])?$_POST["options_".$key]:$object->array_options["options_".$key]); @@ -3138,6 +3133,12 @@ else if ($id > 0 || ! empty($ref)) print 'attribute_required[$key])) print ' class="fieldrequired"'; print '>'.$label.''; + // Convert date into timestamp format + if (in_array($extrafields->attribute_type[$key],array('date','datetime'))) + { + $value = isset($_POST["options_".$key])?dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]):$object->array_options['options_'.$key]; + } + if ($action == 'edit_extras' && $user->rights->facture->creer) { print $extrafields->showInputField($key,$value); diff --git a/htdocs/societe/soc.php b/htdocs/societe/soc.php index e28f1a12443..0972d93f26a 100644 --- a/htdocs/societe/soc.php +++ b/htdocs/societe/soc.php @@ -169,22 +169,9 @@ if (empty($reshook)) $object->commercial_id = GETPOST('commercial_id'); $object->default_lang = GETPOST('default_lang'); - // Get extra fields - foreach ($extralabels as $key => $value) - { - $key_type = $extrafields->attribute_type[$key]; - - if (in_array($key_type,array('date','datetime'))) - { - // Clean parameters - $value_key=dol_mktime($_POST["options_".$key."hour"], $_POST["options_".$key."min"], 0, $_POST["options_".$key."month"], $_POST["options_".$key."day"], $_POST["options_".$key."year"]); - } - else - { - $value_key=GETPOST("options_".$key); - } - $object->array_options["options_".$key]=$value_key; - } + // Fill array 'array_options' with data from add form + $ret = $extrafields->setOptionalsFromPost($extralabels,$object); + if (GETPOST('deletephoto')) $object->logo = ''; else if (! empty($_FILES['photo']['name'])) $object->logo = dol_sanitizeFileName($_FILES['photo']['name']); From 95d8ee8b4118199881125137b01464c5e93968b7 Mon Sep 17 00:00:00 2001 From: jfefe Date: Sat, 30 Mar 2013 10:49:52 +0100 Subject: [PATCH 12/12] Revert "Show number with dot to avoid error when update extrafield" This reverts commit 76efc0484011cdff3b63b46425602cc2a4679b3f. --- htdocs/core/class/extrafields.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index 41465636b03..f9398c21cb8 100755 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -663,7 +663,7 @@ class ExtraFields } elseif ($type == 'price') { - $out=' '.$langs->getCurrencySymbol($conf->currency); + $out=' '.$langs->getCurrencySymbol($conf->currency); } elseif ($type == 'select') {