89 lines
2.5 KiB
PHP
89 lines
2.5 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace Bdp\Libs;
|
|
|
|
class WpConfigEditor extends \WP_Filesystem_Direct
|
|
{
|
|
public const WP_CONFIG_FILE = '/wp-config.php';
|
|
|
|
public function __construct($arg = null)
|
|
{
|
|
if (!defined('FS_CHMOD_FILE')) {
|
|
define('FS_CHMOD_FILE', (fileperms(ABSPATH . 'index.php') & 0777 | 0644));
|
|
}
|
|
}
|
|
|
|
public function readConfig(): string
|
|
{
|
|
if (!$this->exists(ABSPATH . self::WP_CONFIG_FILE)) {
|
|
return '';
|
|
}
|
|
|
|
return $this->get_contents(ABSPATH . self::WP_CONFIG_FILE);
|
|
}
|
|
|
|
public function writeConfig($value): bool
|
|
{
|
|
$value = str_replace('<?php', '', $value);
|
|
$value = str_replace('<?', '', $value);
|
|
$value = str_replace('?>', '', $value);
|
|
|
|
$value = str_replace(PHP_EOL . PHP_EOL, PHP_EOL, $value);
|
|
|
|
$value = '<?php' . PHP_EOL . $value;
|
|
$this->put_contents(ABSPATH . self::WP_CONFIG_FILE, $value);
|
|
return true;
|
|
}
|
|
|
|
public static function updateConfig($key, $value): bool
|
|
{
|
|
$wfs = new self();
|
|
$configContent = $wfs->readConfig();
|
|
|
|
if (null === self::getConfigValue($key)) {
|
|
$configContent .= "define( '$key', $value );" . PHP_EOL;
|
|
}
|
|
|
|
preg_match("/define\([ ]?'($key)'\,[ ]?(.*)[ ]?\);/",$configContent, $matches);
|
|
$configContent = str_replace($matches[0], "define( '$key', $value );", $configContent);
|
|
return $wfs->writeConfig($configContent);
|
|
}
|
|
|
|
public static function getConfigValue($key): ?string
|
|
{
|
|
$wfs = new self();
|
|
$configContent = $wfs->readConfig();
|
|
|
|
preg_match("/define\([ ]?'($key)'\,[ ]?(.*)[ ]?\);/",$configContent, $matches);
|
|
if (count($matches) == 0) {
|
|
return null;
|
|
}
|
|
|
|
return trim($matches[2]);
|
|
}
|
|
|
|
public static function updateSiteKeys(string $newKeySet)
|
|
{
|
|
foreach (explode(PHP_EOL, trim($newKeySet)) as $currentKeyLine) {
|
|
preg_match("/define\([ ]?'(.*)'\,[ ]?(.*)[ ]?\);/", $currentKeyLine, $matches);
|
|
self::updateConfig($matches[1], trim($matches[2]));
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public static function deleteConfigKey($key): bool
|
|
{
|
|
if (null === self::getConfigValue($key)) {
|
|
return true;
|
|
}
|
|
|
|
$wfs = new self();
|
|
$configContent = $wfs->readConfig();
|
|
|
|
preg_match("/define\([ ]?'($key)'\,[ ]?(.*)[ ]?\);/",$configContent, $matches);
|
|
$configContent = str_replace($matches[0], '', $configContent);
|
|
return $wfs->writeConfig($configContent);
|
|
}
|
|
} |