<?php
function paste($node, $parent)
{
//get move-value
$result=$this->db->query("SELECT (rgt-lft+1) AS mv FROM node WHERE id=$node");
while ($row = mysql_fetch_assoc($result))
foreach ($row as $key => $value)
${"n_".$key}=$value;
//get lft, rgt from target
$result=$this->db->query("SELECT lft, rgt FROM node WHERE id=$parent");
while ($row = mysql_fetch_assoc($result))
foreach ($row as $key => $value)
${"p_".$key}=$value;
//reserve space at target pos
$this->db->query("UPDATE node SET lft=lft+$n_mv WHERE lft > $p_lft");
$this->db->query("UPDATE node SET rgt=rgt+$n_mv WHERE rgt > $p_lft");
$result=$this->db->query("SELECT lft, rgt FROM node WHERE id=$node");
while ($row = mysql_fetch_assoc($result))
foreach ($row as $key => $value)
${"n_".$key}=$value;
//update node values
$this->db->query("UPDATE node SET lft=lft-$n_lft+1+$p_lft, rgt=rgt-$n_lft+1+$p_lft WHERE lft BETWEEN $n_lft AND $n_rgt");
//clear the now unused space
$this->db->query("UPDATE node SET lft=lft-$n_mv WHERE lft > $n_rgt");
$this->db->query("UPDATE node SET rgt=rgt-$n_mv WHERE rgt > $n_rgt");
}
?>