<?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");
}

?>