0
0
mirror of https://github.com/ezyang/htmlpurifier.git synced 2024-11-14 09:18:41 +00:00
htmlpurifier/maintenance/rename-config.php

85 lines
2.1 KiB
PHP
Raw Normal View History

#!/usr/bin/php
<?php
chdir(dirname(__FILE__));
require_once 'common.php';
require_once '../library/HTMLPurifier.auto.php';
assertCli();
/**
* @file
* Renames a configuration directive. This involves renaming the file,
* adding an alias, and then regenerating the cache. You still have to
* manually go through and fix any calls to the directive.
* @warning This script doesn't handle multi-stringhash files.
*/
$argv = $_SERVER['argv'];
if (count($argv) < 3) {
echo "Usage: {$argv[0]} OldName NewName\n";
exit(1);
}
chdir('../library/HTMLPurifier/ConfigSchema/schema');
$old = $argv[1];
$new = $argv[2];
if (!file_exists("$old.txt")) {
echo "Cannot move undefined configuration directive $old\n";
exit(1);
}
if ($old === $new) {
echo "Attempting to move to self, aborting\n";
exit(1);
}
if (file_exists("$new.txt")) {
echo "Cannot move to already defined directive $new\n";
exit(1);
}
$file = "$old.txt";
$builder = new HTMLPurifier_ConfigSchema_InterchangeBuilder();
$interchange = new HTMLPurifier_ConfigSchema_Interchange();
$builder->buildFile($interchange, $file);
$contents = file_get_contents($file);
if (strpos($contents, "\r\n") !== false) {
$nl = "\r\n";
} elseif (strpos($contents, "\r") !== false) {
$nl = "\r";
} else {
$nl = "\n";
}
// replace name with new name
$contents = str_replace($old, $new, $contents);
if ($interchange->directives[$old]->aliases) {
$pos_alias = strpos($contents, 'ALIASES:');
$pos_ins = strpos($contents, $nl, $pos_alias);
if ($pos_ins === false) $pos_ins = strlen($contents);
$contents =
substr($contents, 0, $pos_ins) . ", $old" . substr($contents, $pos_ins);
file_put_contents($file, $contents);
} else {
$lines = explode($nl, $contents);
$insert = false;
foreach ($lines as $n => $line) {
if (strncmp($line, '--', 2) === 0) {
$insert = $n;
break;
}
}
if (!$insert) {
$lines[] = "ALIASES: $old";
} else {
array_splice($lines, $insert, 0, "ALIASES: $old");
}
file_put_contents($file, implode($nl, $lines));
}
rename("$old.txt", "$new.txt") || exit(1);