Exemplo n.º 1
0
function updateLiveTable(&$liveDBTable, &$dbtUpdate, $updateOp)
{
    $dbTable = $liveDBTable['name'];
    if ($dbtUpdate['op'] and $updateOp) {
        foreach ($dbtUpdate['op'] as $opid => $op) {
            if ($opid == 'renametableName') {
                $newName = $dbtUpdate['op']['renametableName']['newName'];
                removeLiveTable($dbTable);
                getLiveTable($newName);
                $liveDBTable['name'] = $newName;
            } elseif ($opid == 'renamecolName') {
                foreach ($dbtUpdate['op']['renamecolName'] as $colName => $newProps) {
                    $newName = $newProps['newName'];
                    foreach ($liveDBTable['cells']['tHR'] as $cid => $col) {
                        if ($cid == $colName) {
                            $tHR[$newName] = $col;
                            $tHR[$newName]['Type'] = $newProps['Type'];
                            $tHR[$newName]['Size'] = $newProps['Size'];
                            $tHR[$newName]['Null'] = $newProps['Null'];
                            $tHR[$newName]['Default'] = $newProps['Default'];
                            //$tHR[$newName]['Key'] = $newProps['Key'];
                            //$tHR[$newName]['Comment'] = $dbtUpdate['cells']['tHR'][$newName]['Comment'];
                            //$tHR[$newName]['Extra'] = $dbtUpdate['cells']['tHR'][$newName]['Extra'];
                        } else {
                            $tHR[$cid] = $col;
                        }
                    }
                    $liveDBTable['cells']['tHR'] =& $tHR;
                    unset($row);
                    foreach ($liveDBTable['cells'] as $rid => &$row) {
                        if ($row[$colName] && $rid != 'tHR') {
                            $row[$newName] =& $row[$colName];
                            unset($row[$colName]);
                        }
                    }
                }
            } elseif ($opid == 'delTable') {
                if ($op) {
                    $liveDBTable = null;
                    removeLiveTable($dbTable);
                }
            } elseif ($opid == 'delRow') {
                foreach ($dbtUpdate['op']['delRow'] as $rid => $info) {
                    unset($liveDBTable['cells'][$rid]);
                }
            } elseif ($opid == 'updateFormula') {
            } elseif ($opid == 'delColumn') {
                $columnName = $dbtUpdate['op']['delColumn']['columnName'];
                foreach ($liveDBTable['cells'] as $rid => &$row) {
                    unset($row[$columnName]);
                }
            } elseif ($opid == 'insColumn') {
                foreach ($dbtUpdate['op']['insColumn'] as $columnName => $value) {
                    $cols = $liveDBTable['cells']['tHR'];
                    $liveDBTable['cells']['tHR'] = array();
                    foreach ($cols as $colName => &$col) {
                        $liveDBTable['cells']['tHR'][$colName] = $col;
                        if ($colName == $value['after']) {
                            $liveDBTable['cells']['tHR'][$columnName]['Type'] = $dbtUpdate['cells']['tHR'][$columnName]['Type'];
                            $liveDBTable['cells']['tHR'][$columnName]['Size'] = $dbtUpdate['cells']['tHR'][$columnName]['Size'];
                            $liveDBTable['cells']['tHR'][$columnName]['Null'] = $dbtUpdate['cells']['tHR'][$columnName]['Null'];
                            $liveDBTable['cells']['tHR'][$columnName]['Default'] = $dbtUpdate['cells']['tHR'][$columnName]['Default'];
                            $liveDBTable['cells']['tHR'][$columnName]['Key'] = $dbtUpdate['cells']['tHR'][$columnName]['Key'];
                            //$liveDBTable['cells']['tHR'][$columnName]['Comment'] = $dbtUpdate['cells']['tHR'][$columnName]['Comment'];
                            //$liveDBTable['cells']['tHR'][$columnName]['Extra'] = $dbtUpdate['cells']['tHR'][$columnName]['Extra'];
                        }
                    }
                }
            }
        }
    }
    foreach ($dbtUpdate['cells'] as $rid => &$row) {
        foreach ($row as $cid => &$cell) {
            foreach ($cell as $pid => $prop) {
                $liveDBTable['cells'][$rid][$cid][$pid] = $prop;
            }
        }
    }
}
Exemplo n.º 2
0
//close live tables
if (isset($_SESSION['tables'])) {
    foreach ($_SESSION['tables'] as $tid => $value) {
        $liveDBTable = getLiveTable($tid);
        foreach ($liveDBTable['dbtUpdates'] as $key => &$update) {
            if ($update['data']['swallowedBy'][$_SESSION['uid']]) {
                unset($update['data']['swallowedBy'][$_SESSION['uid']]);
            }
            if (count($sdbtu['data']['swallowedBy']) == count($liveDBTable['usersData']) - 1) {
                unset($liveDBTable['dbtUpdates'][$key]);
            }
        }
        if ($liveDBTable['usersData'][$_SESSION['uid']] and count($liveDBTable['usersData']) == 1) {
            $liveDBTable = null;
            closeLiveTable($tid, $liveDBTable);
            removeLiveTable($tid);
        } else {
            unset($liveDBTable['usersData'][$_SESSION['uid']]);
            closeLiveTable($tid, $liveDBTable);
        }
    }
}
//Destroy session log
$slKey = $key;
$slSemId = sem_get($slKey);
$slShmId = shm_attach($slKey, 1000000);
$sa = sem_acquire($slSemId);
$sessionLog = shm_get_var($slShmId, $slKey);
unset($sessionLog[$_SESSION['uid']]);
$spv = shm_put_var($slShmId, $slKey, $sessionLog);
$sr = sem_release($slSemId);