diff --git a/api/setup/analyzeMenuUrl.cfm b/api/setup/analyzeMenuUrl.cfm index 7118dfd..6657bb1 100644 --- a/api/setup/analyzeMenuUrl.cfm +++ b/api/setup/analyzeMenuUrl.cfm @@ -55,30 +55,51 @@ - + + + + - - - + + + - - - + + + - - - - + + + + + + + + + - - - + + - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/api/setup/saveWizard.cfm b/api/setup/saveWizard.cfm index 74437fd..72d8d0e 100644 --- a/api/setup/saveWizard.cfm +++ b/api/setup/saveWizard.cfm @@ -744,6 +744,23 @@ try { "itemIdMap": itemIdMap }; + // Clean up temp folder from ZIP upload if provided + tempFolder = structKeyExists(data, "tempFolder") && isSimpleValue(data.tempFolder) ? trim(data.tempFolder) : ""; + if (len(tempFolder)) { + // Validate folder name is safe (alphanumeric only - UUID without dashes) + if (reFind("^[a-f0-9]{32}$", tempFolder)) { + tempFolderPath = expandPath("/temp/menu-import/" & tempFolder); + if (directoryExists(tempFolderPath)) { + try { + directoryDelete(tempFolderPath, true); + response.steps.append("Cleaned up temp folder: " & tempFolder); + } catch (any cleanupErr) { + response.steps.append("Warning: Could not delete temp folder: " & cleanupErr.message); + } + } + } + } + } catch (any e) { response.errors.append(e.message); if (len(e.detail)) { diff --git a/api/setup/uploadSavedPage.cfm b/api/setup/uploadSavedPage.cfm index a99611e..2983b3a 100644 --- a/api/setup/uploadSavedPage.cfm +++ b/api/setup/uploadSavedPage.cfm @@ -68,15 +68,64 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - diff --git a/portal/setup-wizard.html b/portal/setup-wizard.html index 353bd01..4592f07 100644 --- a/portal/setup-wizard.html +++ b/portal/setup-wizard.html @@ -1056,7 +1056,8 @@ currentStep: 1, imageObjectUrls: [], // Store object URLs for uploaded images imageMappings: [], // For matching uploaded images to items (from HTML import) - itemImages: {} // item ID -> File object for matched images + itemImages: {}, // item ID -> File object for matched images + tempFolder: null // Temp folder ID from ZIP upload (for cleanup after save) }; // Image preview functions @@ -1435,6 +1436,11 @@ console.log('ZIP uploaded, extracted URL:', uploadResult.URL); + // Store temp folder ID for cleanup after wizard completes + if (uploadResult.FOLDER) { + config.tempFolder = uploadResult.FOLDER; + } + // Update loading message document.getElementById('conversation').innerHTML = ''; addMessage('ai', ` @@ -2817,7 +2823,8 @@ businessId: config.businessId || 0, menuId: config.menuId || 0, userId: config.userId, - data: config.extractedData + data: config.extractedData, + tempFolder: config.tempFolder }) });