$sheetId, 'name' => $name ?: "Untitled Sheet - " . date('Y-m-d H:i'), 'created' => $now, 'modified' => $now, 'itemCount' => count($data), 'user' => $user ]; // Save sheet data $sheetPath = getSheetPath($user, $sheetId); file_put_contents($sheetPath, json_encode($data, JSON_PRETTY_PRINT)); chmod($sheetPath, 0666); // Ensure writable // Update metadata $metadata = loadMetadata(); if (!isset($metadata[$user])) { $metadata[$user] = []; } $metadata[$user][] = $sheet; saveMetadata($metadata); return $sheet; } function loadSheetData($user, $sheetId) { $sheetPath = getSheetPath($user, $sheetId); if (!file_exists($sheetPath)) { return null; } $content = file_get_contents($sheetPath); return json_decode($content, true); } function updateSheet($user, $sheetId, $data) { // Update sheet data $sheetPath = getSheetPath($user, $sheetId); file_put_contents($sheetPath, json_encode($data, JSON_PRETTY_PRINT)); chmod($sheetPath, 0666); // Ensure writable // Update metadata $metadata = loadMetadata(); if (isset($metadata[$user])) { foreach ($metadata[$user] as &$sheet) { if ($sheet['id'] == $sheetId) { $sheet['modified'] = date('c'); $sheet['itemCount'] = count($data); break; } } saveMetadata($metadata); } } function deleteSheet($user, $sheetId) { // Delete sheet file $sheetPath = getSheetPath($user, $sheetId); if (file_exists($sheetPath)) { unlink($sheetPath); } // Update metadata $metadata = loadMetadata(); if (isset($metadata[$user])) { $metadata[$user] = array_filter($metadata[$user], function($sheet) use ($sheetId) { return $sheet['id'] != $sheetId; }); $metadata[$user] = array_values($metadata[$user]); // Re-index saveMetadata($metadata); } } function renameSheet($user, $sheetId, $newName) { $metadata = loadMetadata(); if (isset($metadata[$user])) { foreach ($metadata[$user] as &$sheet) { if ($sheet['id'] == $sheetId) { $sheet['name'] = $newName; $sheet['modified'] = date('c'); break; } } saveMetadata($metadata); return true; } return false; } function duplicateSheet($user, $sheetId) { // Load original sheet $originalData = loadSheetData($user, $sheetId); if (!$originalData) { return null; } // Get original name $metadata = loadMetadata(); $originalName = "Copy of Sheet"; if (isset($metadata[$user])) { foreach ($metadata[$user] as $sheet) { if ($sheet['id'] == $sheetId) { $originalName = "Copy of " . $sheet['name']; break; } } } // Create new sheet return createSheet($user, $originalName, $originalData); } ?>