From 8072f501ff721daae8d07c74e2e25c6054c8140a Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Wed, 9 Nov 2011 16:54:34 +0100 Subject: [PATCH] Works on extend edit in place with external modules (in progress) Conflicts: htdocs/core/class/commonobject.class.php htdocs/core/class/html.form.class.php --- htdocs/core/ajax/loadinplace.php | 29 ++++++----- htdocs/core/ajax/saveinplace.php | 58 ++++++++++++++++------ htdocs/core/class/commonobject.class.php | 26 +++++----- htdocs/core/class/html.form.class.php | 63 +++++++++++++++++++----- htdocs/core/js/editinplace.js | 26 +++++----- 5 files changed, 137 insertions(+), 65 deletions(-) diff --git a/htdocs/core/ajax/loadinplace.php b/htdocs/core/ajax/loadinplace.php index 166d6d3507d..2d688b72425 100644 --- a/htdocs/core/ajax/loadinplace.php +++ b/htdocs/core/ajax/loadinplace.php @@ -44,11 +44,15 @@ if((isset($_GET['field']) && ! empty($_GET['field'])) && (isset($_GET['table_element']) && ! empty($_GET['table_element'])) && (isset($_GET['fk_element']) && ! empty($_GET['fk_element']))) { - $element = GETPOST('element'); - $table_element = GETPOST('table_element'); - $field = substr(GETPOST('field'), 4); // remove prefix val_ - $fk_element = GETPOST('fk_element'); - $type = GETPOST('type'); + $element = GETPOST('element'); + $table_element = GETPOST('table_element'); + $fk_element = GETPOST('fk_element'); + $ext_element = GETPOST('ext_element'); + //$ext_table_element = GETPOST('ext_table_element'); + //$ext_fk_element = GETPOST('ext_fk_element'); + $field = substr(GETPOST('field'), 4); // remove prefix val_ + $type = GETPOST('type'); + $loadmethod = (GETPOST('loadmethod') ? GETPOST('loadmethod') : 'getValueFrom'); if (preg_match('/^([^_]+)_([^_]+)/i',$element,$regs)) { @@ -62,8 +66,8 @@ if((isset($_GET['field']) && ! empty($_GET['field'])) { if ($type == 'select') { - $methodname = 'load_cache_'.GETPOST('method'); - $cachename = 'cache_'.GETPOST('method'); + $methodname = 'load_cache_'.$loadmethod; + $cachename = 'cache_'.GETPOST('loadmethod'); $form = new Form($db); if (method_exists($form, $methodname)) @@ -71,18 +75,19 @@ if((isset($_GET['field']) && ! empty($_GET['field'])) $ret = $form->$methodname(); if ($ret > 0) echo json_encode($form->$cachename); } - else + else if (! empty($ext_element)) { - dol_include_once('/'.$element.'/class/'.$element.'.class.php'); - $classname = ucfirst($element); + dol_include_once('/'.$ext_element.'/class/actions_'.$ext_element.'.class.php'); + $classname = 'Actions'.ucfirst($ext_element); $object = new $classname($db); - print_r($object); + $ret = $object->$methodname(); + if ($ret > 0) echo json_encode($object->$cachename); } } else { $object = new GenericObject($db); - $value=$object->getValueFrom($table_element, $fk_element, $field); + $value=$object->$loadmethod($table_element, $fk_element, $field); echo $value; } } diff --git a/htdocs/core/ajax/saveinplace.php b/htdocs/core/ajax/saveinplace.php index 2c7f87897b0..428e5ace568 100644 --- a/htdocs/core/ajax/saveinplace.php +++ b/htdocs/core/ajax/saveinplace.php @@ -45,12 +45,16 @@ if((isset($_POST['field']) && ! empty($_POST['field'])) && (isset($_POST['table_element']) && ! empty($_POST['table_element'])) && (isset($_POST['fk_element']) && ! empty($_POST['fk_element']))) { - $element = GETPOST('element'); - $table_element = GETPOST('table_element'); - $field = substr(GETPOST('field'), 4); // remove prefix val_ - $fk_element = GETPOST('fk_element'); - $value = GETPOST('value'); - $type = GETPOST('type'); + $element = GETPOST('element'); + $table_element = GETPOST('table_element'); + $fk_element = GETPOST('fk_element'); + $ext_element = GETPOST('ext_element'); + //$ext_table_element = GETPOST('ext_table_element'); + //$ext_fk_element = GETPOST('ext_fk_element'); + $field = substr(GETPOST('field'), 4); // remove prefix val_ + $value = GETPOST('value'); + $type = GETPOST('type'); + $savemethodname = (GETPOST('savemethod') ? GETPOST('savemethod') : 'setValueFrom'); $format='text'; $return=array(); @@ -66,8 +70,6 @@ if((isset($_POST['field']) && ! empty($_POST['field'])) if ($user->rights->$element->creer || $user->rights->$element->write) { - $object = new GenericObject($db); - // Clean parameters $newvalue = trim($value); @@ -90,21 +92,47 @@ if((isset($_POST['field']) && ! empty($_POST['field'])) } else if ($type == 'select') { - $methodname = 'load_cache_'.GETPOST('method'); - $cachename = 'cache_'.GETPOST('method'); + $loadmethodname = 'load_cache_'.GETPOST('loadmethod'); + $loadcachename = 'cache_'.GETPOST('loadmethod'); $form = new Form($db); - $ret = $form->$methodname(); - if ($ret > 0) + if (method_exists($form, $loadmethodname)) { - $cache = $form->$cachename; - $value = $cache[$newvalue]; + $ret = $form->$loadmethodname(); + if ($ret > 0) + { + $loadcache = $form->$loadcachename; + $value = $loadcache[$newvalue]; + } + else + { + $error++; + $return['error'] = $form->error; + } + } + else + { + dol_include_once('/'.$ext_element.'/class/actions_'.$ext_element.'.class.php'); + $classname = 'Actions'.ucfirst($ext_element); + $object = new $classname($db); + $ret = $object->$loadmethodname(); + if ($ret > 0) + { + $loadcache = $object->$loadcachename; + $value = $loadcache[$newvalue]; + } + else + { + $error++; + $return['error'] = $object->error; + } } } if (! $error) { - $ret=$object->setValueFrom($field, $newvalue, $table_element, $fk_element, $format); + if (! is_object($object)) $object = new GenericObject($db); + $ret=$object->$savemethodname($field, $newvalue, $table_element, $fk_element, $format); if ($ret > 0) { if ($type == 'numeric') $value = price($newvalue); diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 8893dbdbbbd..d6ac6834b96 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -1341,19 +1341,19 @@ abstract class CommonObject $sql.= ", '".$this->element."'"; $sql.= ")"; - dol_syslog(get_class($this)."::add_object_linked sql=".$sql); - if ($this->db->query($sql)) - { - $this->db->commit(); - return 1; - } - else - { - $this->error=$this->db->lasterror(); - $this->db->rollback(); - return 0; - } - } + dol_syslog(get_class($this)."::add_object_linked sql=".$sql, LOG_DEBUG); + if ($this->db->query($sql)) + { + $this->db->commit(); + return 1; + } + else + { + $this->error=$this->db->lasterror(); + $this->db->rollback(); + return 0; + } + } /** * Fetch array of objects linked to current object. Links are loaded into this->linked_object array. diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index ecdd89e457f..6134aaae807 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -118,9 +118,10 @@ class Form * @param boolean $perm Permission to allow button to edit parameter * @param string $typeofdata Type of data ('string' by default, 'email', 'numeric:99', 'text' or 'textarea', 'day' or 'datepicker', 'ckeditor:dolibarr_zzz:width:height', 'select:xxx'...) * @param string $editvalue When in edit mode, use this value as $value instead of value + * @param object $extObject External object * @return string HTML edit field */ - function editfieldval($text,$htmlname,$value,$object,$perm,$typeofdata='string',$editvalue='') + function editfieldval($text,$htmlname,$value,$object,$perm,$typeofdata='string',$editvalue='',$extObject=false) { global $conf,$langs,$db; $ret=''; @@ -128,7 +129,7 @@ class Form // When option to edit inline is activated if (! empty($conf->global->MAIN_USE_JQUERY_JEDITABLE)) { - $ret.=$this->editInPlace($object, $value, $htmlname, $perm, $typeofdata); + $ret.=$this->editInPlace($object, $value, $htmlname, $perm, $typeofdata, $extObject); } else { @@ -193,9 +194,10 @@ class Form * @param string $htmlname DIV ID (field name) * @param int $condition Condition to edit * @param string $inputType Type of input ('numeric', 'datepicker', 'textarea', 'ckeditor:dolibarr_zzz', 'select:xxx') + * @param object $extObject External object * @return string HTML edit in place */ - private function editInPlace($object, $value, $htmlname, $condition, $inputType='textarea') + private function editInPlace($object, $value, $htmlname, $condition, $inputType='textarea', $extObject=false) { global $conf; @@ -208,39 +210,74 @@ class Form if ($condition) { + $element = false; + $table_element = false; + $fk_element = false; + $loadmethod = false; + $savemethod = false; + $ext_element = false; + //$ext_table_element = false; + //$ext_fk_element = false; + + if (is_object($object)) + { + $element = $object->element; + $table_element = $object->table_element; + $fk_element = $object->id; + } + + if (is_object($extObject)) + { + $ext_element = $extObject->element; + //$ext_table_element = $extObject->table_element; + //$ext_fk_element = $extObject->id; + } + if (preg_match('/^(string|email|numeric)/',$inputType)) { $tmp=explode(':',$inputType); $inputType=$tmp[0]; $inputOption=$tmp[1]; + if (! empty($tmp[2])) $savemethod=$tmp[2]; } - if ($inputType == 'datepicker') + if (preg_match('/^datepicker/',$inputType)) { + $tmp=explode(':',$inputType); + $inputType=$tmp[0]; $inputOption=$tmp[1]; + if (! empty($tmp[2])) $savemethod=$tmp[2]; + $out.= ''."\n"; // Use for timestamp format } else if (preg_match('/^select/',$inputType)) { $tmp=explode(':',$inputType); - $inputType=$tmp[0]; $inputOption=$tmp[1]; - $out.= ''."\n"; + $inputType=$tmp[0]; $loadmethod=$tmp[1]; + if (! empty($tmp[2])) $savemethod=$tmp[2]; } else if (preg_match('/^ckeditor/',$inputType)) { $tmp=explode(':',$inputType); - $inputType=$tmp[0]; $inputOption=$tmp[1]; + $inputType=$tmp[0]; $toolbar=$tmp[1]; + if (! empty($tmp[2])) $savemethod=$tmp[2]; + if (! empty($conf->fckeditor->enabled)) { - $out.= ''."\n"; + $out.= ''."\n"; } else { $inputType = 'textarea'; } } - - $out.= ''."\n"; - $out.= ''."\n"; - $out.= ''."\n"; - + + $out.= ''."\n"; + $out.= ''."\n"; + $out.= ''."\n"; + $out.= ''."\n"; + $out.= ''."\n"; + $out.= ''."\n"; + //$out.= ''."\n"; + //$out.= ''."\n"; + $out.= '
'.$value.'
'."\n"; } else diff --git a/htdocs/core/js/editinplace.js b/htdocs/core/js/editinplace.js index acec45354b2..8e72bc2369b 100644 --- a/htdocs/core/js/editinplace.js +++ b/htdocs/core/js/editinplace.js @@ -206,7 +206,7 @@ $(document).ready(function() { onblur : 'ignore', cssclass : 'flat', tooltip : tooltipInPlace, - placeholder : placeholderInPlace, + placeholder : ' ', cancel : cancelInPlace, submit : submitInPlace, indicator : indicatorInPlace, @@ -246,22 +246,24 @@ $(document).ready(function() { var element = $( '#element_' + htmlname ).val(); var table_element = $( '#table_element_' + htmlname ).val(); var fk_element = $( '#fk_element_' + htmlname ).val(); - var method = false; - var timestamp = false; - - if (type == 'select') { - var method = $( '#loadmethod_' + htmlname ).val(); - } else if (type == 'datepicker') { - var timestamp = $('#timestamp_' + htmlname ).val(); - } + var loadmethod = $( '#loadmethod_' + htmlname ).val(); + var savemethod = $( '#savemethod_' + htmlname ).val(); + var timestamp = $('#timestamp_' + htmlname ).val(); + var ext_element = $( '#ext_element_' + htmlname ).val(); + //var ext_table_element = $( '#ext_table_element_' + htmlname ).val(); + //var ext_fk_element = $( '#ext_fk_element_' + htmlname ).val(); return { type: type, element: element, table_element: table_element, fk_element: fk_element, - method: method, - timestamp: timestamp + loadmethod: loadmethod, + savemethod: savemethod, + timestamp: timestamp, + ext_element: ext_element, + //ext_table_element: ext_table_element, + //ext_fk_element: ext_fk_element }; } @@ -275,4 +277,4 @@ $(document).ready(function() { data : ["Aberdeen", "Ada", "Adamsville", "Addyston", "Adelphi", "Adena", "Adrian", "Akron"] } }); -}); \ No newline at end of file +});