PATH:
home
/
letacommog
/
letaweb
/
admin
/
classes
/
htmlpurifier
/
extras
<?php /** * Filesystem tools not provided by default; can recursively create, copy * and delete folders. Some template methods are provided for extensibility. * * @note This class must be instantiated to be used, although it does * not maintain state. */ class FSTools { private static $singleton; /** * Returns a global instance of FSTools. */ public static function singleton() { if (empty(self::$singleton)) { self::$singleton = new self(); } return self::$singleton; } /** * Sets our global singleton to something else; useful for overloading * functions. */ public static function setSingleton($singleton) { self::$singleton = $singleton; } /** * Recursively creates a directory. * * @param string $folder Name of folder to create * @note Adapted from the PHP manual comment 76612 */ public function mkdirr($folder) { $folders = preg_split('#[\\\\/]#', $folder); $base = ''; for ($i = 0, $c = count($folders); $i < $c; ++$i) { if (empty($folders[$i])) { if (!$i) { // special case for root level $base .= DIRECTORY_SEPARATOR; } continue; } $base .= $folders[$i]; if (!is_dir($base)) { $this->mkdir($base); } $base .= DIRECTORY_SEPARATOR; } } /** * Copy a file, or recursively copy a folder and its contents; modified * so that copied files, if PHP, have includes removed. * * @note Adapted from http://aidanlister.com/repos/v/function.copyr.php */ public function copyr($source, $dest) { // Simple copy for a file if (is_file($source)) { return $this->copy($source, $dest); } // Make destination directory if (!is_dir($dest)) { $this->mkdir($dest); } // Loop through the folder $dir = $this->dir($source); while (false !== ($entry = $dir->read())) { // Skip pointers if ($entry == '.' || $entry == '..') { continue; } if (!$this->copyable($entry)) { continue; } // Deep copy directories if ($dest !== "$source/$entry") { $this->copyr("$source/$entry", "$dest/$entry"); } } // Clean up $dir->close(); return true; } /** * Overloadable function that tests a filename for copyability. By * default, everything should be copied; you can restrict things to * ignore hidden files, unreadable files, etc. This function * applies to copyr(). */ public function copyable($file) { return true; } /** * Delete a file, or a folder and its contents. * * @note Adapted from http://aidanlister.com/repos/v/function.rmdirr.php */ public function rmdirr($dirname) { // Sanity check if (!$this->file_exists($dirname)) { return false; } // Simple delete for a file if ($this->is_file($dirname) || $this->is_link($dirname)) { return $this->unlink($dirname); } // Loop through the folder $dir = $this->dir($dirname); while (false !== $entry = $dir->read()) { // Skip pointers if ($entry == '.' || $entry == '..') { continue; } // Recurse $this->rmdirr($dirname.DIRECTORY_SEPARATOR.$entry); } // Clean up $dir->close(); return $this->rmdir($dirname); } /** * Recursively globs a directory. */ public function globr($dir, $pattern, $flags = null) { $files = $this->glob("$dir/$pattern", $flags); if ($files === false) { $files = array(); } $sub_dirs = $this->glob("$dir/*", GLOB_ONLYDIR); if ($sub_dirs === false) { $sub_dirs = array(); } foreach ($sub_dirs as $sub_dir) { $sub_files = $this->globr($sub_dir, $pattern, $flags); $files = array_merge($files, $sub_files); } return $files; } /** * Allows for PHP functions to be called and be stubbed. * * @warning This function will not work for functions that need * to pass references; manually define a stub function for those. */ public function __call($name, $args) { return call_user_func_array($name, $args); } } // vim: et sw=4 sts=4
[+]
..
[-] HTMLPurifierExtras.autoload.php
[edit]
[-] README
[edit]
[-] HTMLPurifierExtras.auto.php
[edit]
[+]
FSTools
[+]
ConfigDoc
[-] FSTools.php
[edit]
[-] HTMLPurifierExtras.php
[edit]