This add hook `setLinkedObjectSourceTargetType` in
`CommonObject::showLinkToObjectBlock()` and in
`CommonObject::fetchObjectLinked()` to allow overiding sourcetype and
targettype by custom modules.
This fix the invoice create form when we provide `origin` element in
url. The actual create form overide the value for origin field with
`$objectsrc->element`. This make creation of invoice originating from a custom
module module impossible because we need the module part to instantiate
the class for the custom module object.
This also modify Common Object::fetch Object Linked() to append the
module part for `$sourcetype` and `$targettype` if it not set and object
have module property and it not in core module.
This set the correct `modulepart` parameter for link generated to
`document.php` of ecm auto index page if `src_object_type` for
ecm document has a module suffix (`@modulename`).
Files added to `llx_ecm_files` for externals modules never be removed on
object deletion.
When `CommonObject::deleteEcmFiles()` is called with `mode=1`, it use
this sql filter to find the file related to the object which is removed
:
```
$sql .= " WHERE fk_object IN (SELECT rowid FROM ".MAIN_DB_PREFIX."ecm_files WHERE src_object_type = '".$this->db->escape($this->table_element.(empty($this->module) ? '' : '@'.$this->module))."' AND src_object_id = ".((int) $this->id).")";
```
We see it append `'@'.$this->module` to `$this->table_element` but when
file is add to the `llx_ecm_files` by
`CommonObject::commonGenerateDocument()` , it added whiteout the
`'@'.$this->module` suffix. So the file is never remove from
`llx_ecm_files` when object is deleted.
This fix it by appending module suffix on `src_object_type` if object
has `module` property when add document to the `llx_ecm_files`.
FormFile::list_of_autoecmfiles() can instantiate object with parameters
resulting of hook `addSectionECMAuto` but for do this,
it use `${$hookmanager->resArray['classname']}` which return a
`null`. Instead we should do this
`$hookmanager->resArray['classname']`.