New: hooks for pdf_writelinedesc now implement the rule to overwrite or
not default code (http://wiki.dolibarr.org/index.php/Hooks_system)
This commit is contained in:
parent
01b2a6a79b
commit
0f1741a06b
@ -116,7 +116,7 @@ class HookManager
|
|||||||
* @param array $parameters Array of parameters
|
* @param array $parameters Array of parameters
|
||||||
* @param Object &$object Object to use hooks on
|
* @param Object &$object Object to use hooks on
|
||||||
* @param string &$action Action code on calling page ('create', 'edit', 'view', 'add', 'update', 'delete'...)
|
* @param string &$action Action code on calling page ('create', 'edit', 'view', 'add', 'update', 'delete'...)
|
||||||
* @return mixed For doActions,formObjectOptions: Return 0 if we want to keep standard actions, >0 if if want to stop standard actions, <0 means KO.
|
* @return mixed For doActions,formObjectOptions,pdf_xxx: Return 0 if we want to keep standard actions, >0 if if want to stop standard actions, <0 means KO.
|
||||||
* For printSearchForm,printLeftBlock,printTopRightMenu,formAddObjectLine,...: Return HTML string. TODO Must always return an int and things to print into ->resprints.
|
* For printSearchForm,printLeftBlock,printTopRightMenu,formAddObjectLine,...: Return HTML string. TODO Must always return an int and things to print into ->resprints.
|
||||||
* Can also return some values into an array ->results.
|
* Can also return some values into an array ->results.
|
||||||
* $this->error or this->errors are also defined by class called by this function if error.
|
* $this->error or this->errors are also defined by class called by this function if error.
|
||||||
@ -128,6 +128,11 @@ class HookManager
|
|||||||
$parameters['context']=join(':',$this->contextarray);
|
$parameters['context']=join(':',$this->contextarray);
|
||||||
dol_syslog(get_class($this).'::executeHooks method='.$method." action=".$action." context=".$parameters['context']);
|
dol_syslog(get_class($this).'::executeHooks method='.$method." action=".$action." context=".$parameters['context']);
|
||||||
|
|
||||||
|
// Define type of hook ('output', 'returnvalue' or 'addreplace')
|
||||||
|
$hooktype='output';
|
||||||
|
if (preg_match('/^pdf_/',$method)) $hooktype='returnvalue'; // pdf_xxx except pdf_writelinedesc are returnvalue hooks. When there is 2 hooks of this type, only last one win.
|
||||||
|
if ($method == 'doActions' || $method == 'formObjectOptions' || $method == 'pdf_writelinedesc') $hooktype='addreplace';
|
||||||
|
|
||||||
// Loop on each hook to qualify modules that declared context
|
// Loop on each hook to qualify modules that declared context
|
||||||
$modulealreadyexecuted=array();
|
$modulealreadyexecuted=array();
|
||||||
$resaction=0; $error=0;
|
$resaction=0; $error=0;
|
||||||
@ -145,15 +150,15 @@ class HookManager
|
|||||||
// test to avoid to run twice a hook, when a module implements several active contexts
|
// test to avoid to run twice a hook, when a module implements several active contexts
|
||||||
if (in_array($module,$modulealreadyexecuted)) continue;
|
if (in_array($module,$modulealreadyexecuted)) continue;
|
||||||
$modulealreadyexecuted[$module]=$module;
|
$modulealreadyexecuted[$module]=$module;
|
||||||
|
|
||||||
// Hooks that return int
|
// Hooks that return int
|
||||||
if (($method == 'doActions' || $method == 'formObjectOptions'))
|
if ($hooktype == 'addreplace')
|
||||||
{
|
{
|
||||||
$resaction += $actionclassinstance->$method($parameters, $object, $action, $this); // $object and $action can be changed by method ($object->id during creation for example or $action to go back to other action for example)
|
$resaction += $actionclassinstance->$method($parameters, $object, $action, $this); // $object and $action can be changed by method ($object->id during creation for example or $action to go back to other action for example)
|
||||||
if ($resaction < 0 || ! empty($actionclassinstance->error) || (! empty($actionclassinstance->errors) && count($actionclassinstance->errors) > 0))
|
if ($resaction < 0 || ! empty($actionclassinstance->error) || (! empty($actionclassinstance->errors) && count($actionclassinstance->errors) > 0))
|
||||||
{
|
{
|
||||||
$error++;
|
$error++;
|
||||||
$this->error=$actionclassinstance->error; $this->errors=array_merge($this->errors, (array) $actionclassinstance->errors);
|
$this->error=$actionclassinstance->error; $this->errors=array_merge($this->errors, (array) $actionclassinstance->errors);
|
||||||
|
|
||||||
// TODO remove this. Change must be inside the method if required
|
// TODO remove this. Change must be inside the method if required
|
||||||
if ($method == 'doActions')
|
if ($method == 'doActions')
|
||||||
{
|
{
|
||||||
@ -168,7 +173,7 @@ class HookManager
|
|||||||
// TODO. this should be done into the method by returning nothing
|
// TODO. this should be done into the method by returning nothing
|
||||||
if (is_array($parameters) && ! empty($parameters['special_code']) && $parameters['special_code'] > 3 && $parameters['special_code'] != $actionclassinstance->module_number) continue;
|
if (is_array($parameters) && ! empty($parameters['special_code']) && $parameters['special_code'] > 3 && $parameters['special_code'] != $actionclassinstance->module_number) continue;
|
||||||
|
|
||||||
$result = $actionclassinstance->$method($parameters, $object, $action, $this);
|
$result = $actionclassinstance->$method($parameters, $object, $action, $this); // $object and $action can be changed by method ($object->id during creation for example or $action to go back to other action for example)
|
||||||
|
|
||||||
if (is_array($actionclassinstance->results)) $this->resArray =array_merge($this->resArray, $actionclassinstance->results);
|
if (is_array($actionclassinstance->results)) $this->resArray =array_merge($this->resArray, $actionclassinstance->results);
|
||||||
if (! empty($actionclassinstance->resprints)) $this->resPrint.=$actionclassinstance->resprints;
|
if (! empty($actionclassinstance->resprints)) $this->resPrint.=$actionclassinstance->resprints;
|
||||||
@ -184,7 +189,9 @@ class HookManager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($method != 'doActions' && $method != 'formObjectOptions') return $this->resPrint; // TODO remove this. When there is something to print, ->resPrint is filled.
|
// TODO remove this. When there is something to print for an output hook, ->resPrint is filled.
|
||||||
|
if ($hooktype == 'output') return $this->resPrint;
|
||||||
|
if ($hooktype == 'returnvalue') return $result;
|
||||||
return ($error?-1:$resaction);
|
return ($error?-1:$resaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -839,6 +839,7 @@ function pdf_writelinedesc(&$pdf,$object,$i,$outputlangs,$w,$h,$posx,$posy,$hide
|
|||||||
{
|
{
|
||||||
global $db, $conf, $langs, $hookmanager;
|
global $db, $conf, $langs, $hookmanager;
|
||||||
|
|
||||||
|
$reshook=0;
|
||||||
if (is_object($hookmanager) && ( ($object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code) ) || ! empty($object->lines[$i]->fk_parent_line) ) )
|
if (is_object($hookmanager) && ( ($object->lines[$i]->product_type == 9 && ! empty($object->lines[$i]->special_code) ) || ! empty($object->lines[$i]->fk_parent_line) ) )
|
||||||
{
|
{
|
||||||
$special_code = $object->lines[$i]->special_code;
|
$special_code = $object->lines[$i]->special_code;
|
||||||
@ -847,7 +848,7 @@ function pdf_writelinedesc(&$pdf,$object,$i,$outputlangs,$w,$h,$posx,$posy,$hide
|
|||||||
$action='';
|
$action='';
|
||||||
$reshook=$hookmanager->executeHooks('pdf_writelinedesc',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
|
$reshook=$hookmanager->executeHooks('pdf_writelinedesc',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
|
||||||
}
|
}
|
||||||
else
|
if (empty($reshook))
|
||||||
{
|
{
|
||||||
$labelproductservice=pdf_getlinedesc($object,$i,$outputlangs,$hideref,$hidedesc,$issupplierline);
|
$labelproductservice=pdf_getlinedesc($object,$i,$outputlangs,$hideref,$hidedesc,$issupplierline);
|
||||||
// Description
|
// Description
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user