feat: implement core UI dashboard and service management infrastructure for MultiPHP
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
function mockToggleExtension(iniContent, extName, enabled) {
|
||||
const lines = iniContent.split(/\r?\n/);
|
||||
let found = false;
|
||||
const newLines = lines.map(line => {
|
||||
const trimmedLine = line.trim();
|
||||
const pattern = new RegExp(`^\\s*;?\\s*extension\\s*=\\s*(?:php_)?${extName}(?:\\.dll)?\\s*$`, 'i');
|
||||
|
||||
if (pattern.test(trimmedLine)) {
|
||||
found = true;
|
||||
return enabled ? `extension=php_${extName}.dll` : `;extension=php_${extName}.dll`;
|
||||
}
|
||||
return line;
|
||||
});
|
||||
|
||||
if (!found && enabled) {
|
||||
const extSectionIndex = newLines.findIndex(l => l.trim().toLowerCase() === '; dynamic extensions');
|
||||
if (extSectionIndex !== -1) {
|
||||
newLines.splice(extSectionIndex + 1, 0, `extension=php_${extName}.dll`);
|
||||
} else {
|
||||
newLines.push(`extension=php_${extName}.dll`);
|
||||
}
|
||||
}
|
||||
|
||||
let extDirSet = false;
|
||||
const finalLines = newLines.map(line => {
|
||||
if (line.trim().startsWith('extension_dir') || line.trim().startsWith(';extension_dir')) {
|
||||
extDirSet = true;
|
||||
return 'extension_dir = "ext"';
|
||||
}
|
||||
return line;
|
||||
});
|
||||
|
||||
if (!extDirSet) {
|
||||
finalLines.unshift('extension_dir = "ext"');
|
||||
}
|
||||
|
||||
return finalLines.join('\n');
|
||||
}
|
||||
|
||||
// Test cases
|
||||
const testIni = `
|
||||
[PHP]
|
||||
; extension_dir = "./"
|
||||
; Dynamic Extensions
|
||||
;extension=php_bz2.dll
|
||||
extension=php_curl.dll
|
||||
;extension=php_mysql.dll
|
||||
`;
|
||||
|
||||
console.log("--- Initial ---");
|
||||
console.log(testIni);
|
||||
|
||||
console.log("\n--- Enable mysql ---");
|
||||
let updated = mockToggleExtension(testIni, 'mysql', true);
|
||||
console.log(updated);
|
||||
if (updated.includes('extension=php_mysql.dll') && !updated.includes(';extension=php_mysql.dll')) {
|
||||
console.log("SUCCESS: mysql enabled");
|
||||
} else {
|
||||
console.log("FAIL: mysql not enabled properly");
|
||||
}
|
||||
|
||||
console.log("\n--- Disable curl ---");
|
||||
updated = mockToggleExtension(updated, 'curl', false);
|
||||
console.log(updated);
|
||||
if (updated.includes(';extension=php_curl.dll')) {
|
||||
console.log("SUCCESS: curl disabled");
|
||||
} else {
|
||||
console.log("FAIL: curl not disabled properly");
|
||||
}
|
||||
|
||||
console.log("\n--- Check extension_dir ---");
|
||||
if (updated.includes('extension_dir = "ext"')) {
|
||||
console.log("SUCCESS: extension_dir set correctly");
|
||||
} else {
|
||||
console.log("FAIL: extension_dir not set properly");
|
||||
}
|
||||
|
||||
console.log("\n--- Add new extension (mbstring) ---");
|
||||
updated = mockToggleExtension(updated, 'mbstring', true);
|
||||
console.log(updated);
|
||||
if (updated.includes('extension=php_mbstring.dll')) {
|
||||
console.log("SUCCESS: mbstring added");
|
||||
} else {
|
||||
console.log("FAIL: mbstring not added");
|
||||
}
|
||||
Reference in New Issue
Block a user