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; } } } }
//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);