89 lines
2.6 KiB
JavaScript
89 lines
2.6 KiB
JavaScript
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");
|
|
}
|