forked from Wavyzz/dolibarr
NEW lazy load to substitute project variables (#26451)
* NEW lazy load to substitute project variables * FIX load class file * Keep key to substitute if no link with project
This commit is contained in:
committed by
GitHub
parent
00cbaa094c
commit
2ff8ddb4fa
@@ -8252,15 +8252,30 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
|
|||||||
$substitutionarray['__ATTENDEE_LASTNAME__'] = isset($object->lastname) ? $object->lastname : '';
|
$substitutionarray['__ATTENDEE_LASTNAME__'] = isset($object->lastname) ? $object->lastname : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$project = null;
|
||||||
if (is_object($object->project)) {
|
if (is_object($object->project)) {
|
||||||
$substitutionarray['__PROJECT_ID__'] = (is_object($object->project) ? $object->project->id : '');
|
$project = $object->project;
|
||||||
$substitutionarray['__PROJECT_REF__'] = (is_object($object->project) ? $object->project->ref : '');
|
} elseif (is_object($object->projet)) { // Deprecated, for backward compatibility
|
||||||
$substitutionarray['__PROJECT_NAME__'] = (is_object($object->project) ? $object->project->title : '');
|
$project = $object->projet;
|
||||||
}
|
}
|
||||||
if (is_object($object->projet)) { // Deprecated, for backward compatibility
|
if ($project) {
|
||||||
$substitutionarray['__PROJECT_ID__'] = (is_object($object->projet) ? $object->projet->id : '');
|
$substitutionarray['__PROJECT_ID__'] = $project->id;
|
||||||
$substitutionarray['__PROJECT_REF__'] = (is_object($object->projet) ? $object->projet->ref : '');
|
$substitutionarray['__PROJECT_REF__'] = $project->ref;
|
||||||
$substitutionarray['__PROJECT_NAME__'] = (is_object($object->projet) ? $object->projet->title : '');
|
$substitutionarray['__PROJECT_NAME__'] = $project->title;
|
||||||
|
} else {
|
||||||
|
// can substitute variables for project : uses lazy load in "make_substitutions" method
|
||||||
|
$project_id = 0;
|
||||||
|
if ($object->fk_project > 0) {
|
||||||
|
$project_id = $object->fk_project;
|
||||||
|
} elseif ($object->fk_projet > 0) {
|
||||||
|
$project_id = $object->fk_project;
|
||||||
|
}
|
||||||
|
if ($project_id > 0) {
|
||||||
|
// path:class:method:id
|
||||||
|
$substitutionarray['__PROJECT_ID__@lazyload'] = '/projet/class/project.class.php:Project:fetchAndSetSubstitution:' . $project_id;
|
||||||
|
$substitutionarray['__PROJECT_REF__@lazyload'] = '/projet/class/project.class.php:Project:fetchAndSetSubstitution:' . $project_id;
|
||||||
|
$substitutionarray['__PROJECT_NAME__@lazyload'] = '/projet/class/project.class.php:Project:fetchAndSetSubstitution:' . $project_id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (is_object($object) && $object->element == 'project') {
|
if (is_object($object) && $object->element == 'project') {
|
||||||
$substitutionarray['__PROJECT_NAME__'] = $object->title;
|
$substitutionarray['__PROJECT_NAME__'] = $object->title;
|
||||||
@@ -8580,7 +8595,7 @@ function getCommonSubstitutionArray($outputlangs, $onlykey = 0, $exclude = null,
|
|||||||
*/
|
*/
|
||||||
function make_substitutions($text, $substitutionarray, $outputlangs = null, $converttextinhtmlifnecessary = 0)
|
function make_substitutions($text, $substitutionarray, $outputlangs = null, $converttextinhtmlifnecessary = 0)
|
||||||
{
|
{
|
||||||
global $conf, $langs;
|
global $conf, $db, $langs;
|
||||||
|
|
||||||
if (!is_array($substitutionarray)) {
|
if (!is_array($substitutionarray)) {
|
||||||
return 'ErrorBadParameterSubstitutionArrayWhenCalling_make_substitutions';
|
return 'ErrorBadParameterSubstitutionArrayWhenCalling_make_substitutions';
|
||||||
@@ -8698,6 +8713,53 @@ function make_substitutions($text, $substitutionarray, $outputlangs = null, $con
|
|||||||
$valuetouseforsubstitution = $tmpobj->$method($id, '__XXX__');
|
$valuetouseforsubstitution = $tmpobj->$method($id, '__XXX__');
|
||||||
And make the replacement of "__XXX__@lazyload" with $valuetouseforsubstitution
|
And make the replacement of "__XXX__@lazyload" with $valuetouseforsubstitution
|
||||||
*/
|
*/
|
||||||
|
$memory_object_list = array();
|
||||||
|
foreach ($substitutionarray as $key => $value) {
|
||||||
|
$lazy_load_arr = array();
|
||||||
|
if (preg_match('/(__[A-Z\_]+__)@lazyload$/', $key, $lazy_load_arr)) {
|
||||||
|
if (isset($lazy_load_arr[1]) && !empty($lazy_load_arr[1])) {
|
||||||
|
$key_to_substitute = $lazy_load_arr[1];
|
||||||
|
if (preg_match('/' . preg_quote($key_to_substitute, '/') . '/', $text)) {
|
||||||
|
$param_arr = explode(':', $value);
|
||||||
|
// path:class:method:id
|
||||||
|
if (count($param_arr) == 4) {
|
||||||
|
$path = $param_arr[0];
|
||||||
|
$class = $param_arr[1];
|
||||||
|
$method = $param_arr[2];
|
||||||
|
$id = (int) $param_arr[3];
|
||||||
|
|
||||||
|
// load class file and init object list in memory
|
||||||
|
if (!isset($memory_object_list[$class])) {
|
||||||
|
if (dol_is_file(DOL_DOCUMENT_ROOT . $path)) {
|
||||||
|
require_once DOL_DOCUMENT_ROOT . $path;
|
||||||
|
if (class_exists($class)) {
|
||||||
|
$memory_object_list[$class] = array(
|
||||||
|
'list' => array(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fetch object and set substitution
|
||||||
|
if (isset($memory_object_list[$class]) && isset($memory_object_list[$class]['list'])) {
|
||||||
|
if (method_exists($class, $method)) {
|
||||||
|
if (!isset($memory_object_list[$class]['list'][$id])) {
|
||||||
|
$tmpobj = new $class($db);
|
||||||
|
$valuetouseforsubstitution = $tmpobj->$method($id, $key_to_substitute);
|
||||||
|
$memory_object_list[$class]['list'][$id] = $tmpobj;
|
||||||
|
} else {
|
||||||
|
$tmpobj = $memory_object_list[$class]['list'][$id];
|
||||||
|
$valuetouseforsubstitution = $tmpobj->$method($id, $key_to_substitute, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$text = str_replace("$key_to_substitute", "$valuetouseforsubstitution", $text); // We must keep the " to work when value is 123.5 for example
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $text;
|
return $text;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -776,6 +776,38 @@ class Project extends CommonObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch object and substitute key
|
||||||
|
*
|
||||||
|
* @param int $id Project id
|
||||||
|
* @param string $key Key to substitute
|
||||||
|
* @param bool $fetched [=false] Not already fetched
|
||||||
|
* @return string Substitute key
|
||||||
|
*/
|
||||||
|
public function fetchAndSetSubstitution($id, $key, $fetched = false)
|
||||||
|
{
|
||||||
|
$substitution = '';
|
||||||
|
|
||||||
|
if ($fetched === false) {
|
||||||
|
$res = $this->fetch($id);
|
||||||
|
if ($res > 0) {
|
||||||
|
$fetched = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($fetched === true) {
|
||||||
|
if ($key == '__PROJECT_ID__') {
|
||||||
|
$substitution = ($this->id > 0 ? $this->id : '');
|
||||||
|
} elseif ($key == '__PROJECT_REF__') {
|
||||||
|
$substitution = $this->ref;
|
||||||
|
} elseif ($key == '__PROJECT_NAME__') {
|
||||||
|
$substitution = $this->title;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $substitution;
|
||||||
|
}
|
||||||
|
|
||||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||||
/**
|
/**
|
||||||
* Return list of elements for type, linked to a project
|
* Return list of elements for type, linked to a project
|
||||||
|
|||||||
Reference in New Issue
Block a user