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

?>