Version 1
[yaffs-website] / vendor / ezyang / htmlpurifier / maintenance / rename-config.php
diff --git a/vendor/ezyang/htmlpurifier/maintenance/rename-config.php b/vendor/ezyang/htmlpurifier/maintenance/rename-config.php
new file mode 100644 (file)
index 0000000..6e59e2a
--- /dev/null
@@ -0,0 +1,84 @@
+#!/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);