- config.php: Azure tenant/client constants, SSO_ENABLED = true
- auth.php: requireAuth() middleware, getSafeUser(), getUserDataFile()
- auth_gate.php: MSAL.js PKCE login flow, stores return URL in sessionStorage
- logout.php: destroys PHP session + calls msalInstance.logoutRedirect()
- api.php: public create_session endpoint (JWT validation), 401 guard on all other actions, per-user data files (data_{safeUser}.json)
- sheet_helpers.php: fix dot sanitisation '_' → '_dot_' to match getSafeUser()
- index/builder/help.php: requireAuth() at top, user email + Sign Out in header
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
147 lines
3.9 KiB
PHP
147 lines
3.9 KiB
PHP
<?php
|
|
// Sheet Management Helper Functions
|
|
|
|
function getMetadataPath() {
|
|
return __DIR__ . '/sheets_metadata.json';
|
|
}
|
|
|
|
function getSheetPath($user, $sheetId) {
|
|
$safeUser = str_replace(['@', '.'], ['_at_', '_dot_'], $user);
|
|
return __DIR__ . "/sheets/{$safeUser}_{$sheetId}.json";
|
|
}
|
|
|
|
function loadMetadata() {
|
|
$path = getMetadataPath();
|
|
if (!file_exists($path)) {
|
|
return [];
|
|
}
|
|
$content = file_get_contents($path);
|
|
return json_decode($content, true) ?: [];
|
|
}
|
|
|
|
function saveMetadata($metadata) {
|
|
$path = getMetadataPath();
|
|
file_put_contents($path, json_encode($metadata, JSON_PRETTY_PRINT));
|
|
chmod($path, 0666); // Ensure writable
|
|
}
|
|
|
|
function getUserSheets($user) {
|
|
$metadata = loadMetadata();
|
|
return $metadata[$user] ?? [];
|
|
}
|
|
|
|
function createSheet($user, $name, $data = []) {
|
|
$sheetId = time() . rand(100, 999);
|
|
$now = date('c');
|
|
|
|
$sheet = [
|
|
'id' => $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);
|
|
}
|
|
?>
|