#!/usr/bin/php -q
<?php
// only command line execute this script
if (isset($_SERVER['HTTP_HOST'])) exit;

$prog = array_shift($argv);
if (count($argv)<1) {
    echo "usage: $prog dirname ...\n";
    echo " dirname: /^[^0-9]+[0-9]+\$/ e.g. 'modname3'\n";
    exit;
}

chdir(dirname(__FILE__));

// make target file lists

// force writable permission files
$writable = array();

// rewrite prefix files
$modifies = find_file('templates', 'tinycontent_*.html');
$modifies[] = 'sql/tinycontent.sql';

function duplicate($dir, &$writable, &$files, $verb=false) {
    $base = '../'.$dir;
    $id = preg_replace('/^\D+/', '', $dir);
    $tablename = 'tinycontent';

    if (!empty($id)) $id = intval($id);
    if (!is_dir($base)) mkdir($base);
    $base .= '/';
    foreach (find_file() as $name) {
	if ($verb) echo "  dup: $name\n";
	if (is_dir($name)) mkdir($base.$name);
	else link($name, $base.$name);
    }

    foreach ($writable as $i) {
	$f = $base.$i;
	if ($verb) echo "  writable: $f\n";
	if (is_dir($f)) chmod($f, 0777);
	else chmod($f, 0666);
    }

    foreach ($files as $file) {
	$body = file_get_contents($file);
	if (preg_match('/\.sql$/', $file)) {
	    $newfile = $base.preg_replace('/(\.sql)$/', "$id\$1", $file);
	    if ($verb) echo "  $file -> $newfile\n";
	    $body = preg_replace("/\\s${tablename}\\s/", " ${tablename}${id} ", $body);
	    file_put_contents($newfile, $body);
	} elseif (preg_match('/\.html$/', $file)) {
	    $newfile = $base.preg_replace("/\\/${tablename}_/", "/${tablename}${id}_", $file);
	    if ($verb) echo "  $file -> $newfile\n";
	    file_put_contents($newfile, $body);
	}
    }
}

function find_file($dir='.', $pat='') {
    $files = array();
    $dh = opendir($dir);
    $reg = preg_replace(array('/\./', '/\*/'), array('\.', '.*'), $pat);
    while ($file = readdir($dh)) {
	if ($file=='.' || $file=='..') continue;
	if (preg_match('/~$/', $file)) continue;
	$path = preg_replace('/\.\//', '', "$dir/$file");
	if (is_dir($path)) {
	    if ($file == "CVS") continue;
	    if (!$pat) $files[] = $path;
	    $files = array_merge($files, find_file($path, $pat));
	} else {
	    if ($pat && !preg_match("/^$reg$/", $file)) continue;
	    $files[] = $path;
	}
    }
    closedir($dh);
    return $files;
}

if (!function_exists('file_put_contents')) {
    // php 4.3.11 no have?
    function file_put_contents($file, $text) {
	$fp = fopen($file, "w");
	fwrite($fp, $text);
	fclose($fp);
    }
}

$verb = false;
if ($argv[0] == '-v') {
    array_shift($argv);
    $verb = true;
}
foreach ($argv as $dir) {
    echo "duplicate: $dir\n";
    duplicate($dir, $writable, $modifies, $verb);
}
?>