<?php
//@*--


class Theme_Designer_Helper_Filesystem extends Mage_Core_Helper_Abstract
{
    /**
     * @param $dir
     * @param bool $deleteRootToo
     */
    public static function remove($dir, $deleteRootToo = false)
    {
        if (!is_dir($dir)) {
            @unlink($dir);
            return;
        }
        if (!$dh = @opendir($dir)) {
            return;
        }
        while (false !== ($obj = readdir($dh))) {
            if ($obj == '.' || $obj == '..') {
                continue;
            }

            if (!@unlink($dir . '/' . $obj)) {
                self::remove($dir . '/' . $obj, true);
            }
        }

        closedir($dh);

        if ($deleteRootToo) {
            @rmdir($dir);
        }
        return;
    }

    /**
     * @param $src
     * @param $dst
     */
    public static function copy($src, $dst)
    {
        if (is_file($src)) {
            $dir = dirname($dst);
            if (!is_dir($dir)) {
                mkdir($dir, 0777, true);
            }
            copy($src, $dst);
        } else if (is_dir($src)) {
            $dir = opendir($src);
            @mkdir($dst, 0777, true);
            while (false !== ($file = readdir($dir))) {
                if (($file != '.') && ($file != '..')) {
                    if (is_dir($src . '/' . $file)) {
                        self::copy($src . '/' . $file, $dst . '/' . $file);
                    } else {
                        copy($src . '/' . $file, $dst . '/' . $file);
                    }
                }
            }
            closedir($dir);
        } else {
            throw new Mage_Core_Exception('Wrong arguments');
        }
    }

    /**
     * @param $path string
     * @return array File list
     */
    public static function enumerate($path)
    {
        $files = array();
        if (is_dir($path)) {
            if ($handle = opendir($path)) {
                while (($name = readdir($handle)) !== false) {
                    if (!preg_match('#^\.#', $name)) {
                        if (is_dir($path . "/" . $name)) {
                            $files = array_merge($files, self::enumerate($path . "/" . $name));
                        } else {
                            $files[] = $path . "/" . $name;
                        }
                    }
                }

                closedir($handle);
            }
        }

        return $files;
    }

    /**
     * @param $path
     * @param $contents
     */
    public static function write($path, $contents)
    {
        $dir = dirname($path);
        if (!file_exists($dir)) {
            mkdir($dir, 0777, true);
        }
        file_put_contents($path, $contents);
    }
}

//--*@