/**
* @param $ID
* @param $updateName
* @param $changeParent
**/
function regenerateTreeUnderID($ID, $updateName, $changeParent)
{
global $DB;
if ($updateName || $changeParent) {
$currentNode = clone $this;
if ($currentNode->getFromDB($ID)) {
$currentNodeCompleteName = $currentNode->getField("completename");
$nextNodeLevel = $currentNode->getField("level") + 1;
} else {
$nextNodeLevel = 1;
}
$query = "SELECT `id`, `name`\n FROM `" . $this->getTable() . "`\n WHERE `" . $this->getForeignKeyField() . "` = '{$ID}'";
if (Session::haveTranslations($this->getType(), 'completename')) {
DropdownTranslation::regenerateAllCompletenameTranslationsFor($this->getType(), $ID);
}
foreach ($DB->request($query) as $data) {
$query = "UPDATE `" . $this->getTable() . "`\n SET ";
$fieldsToUpdate = array();
if ($updateName || $changeParent) {
if (isset($currentNodeCompleteName)) {
$fieldsToUpdate[] = "`completename`='" . self::getCompleteNameFromParents($currentNodeCompleteName, addslashes($data["name"])) . "'";
} else {
$fieldsToUpdate[] = "`completename`='" . addslashes($data["name"]) . "'";
}
}
if ($changeParent) {
// We have to reset the ancestors as only these changes (ie : not the children).
$fieldsToUpdate[] = "`ancestors_cache` = NULL";
// And we must update the level of the current node ...
$fieldsToUpdate[] = "`level` = '{$nextNodeLevel}'";
}
$query .= implode(', ', $fieldsToUpdate) . " WHERE `id`= '" . $data["id"] . "'";
$DB->query($query);
// Translations :
if (Session::haveTranslations($this->getType(), 'completename')) {
DropdownTranslation::regenerateAllCompletenameTranslationsFor($this->getType(), $data['id']);
}
$this->regenerateTreeUnderID($data["id"], $updateName, $changeParent);
}
}
}