/** * Creates a new FileInfo from an existing file. Filter manages how this * information will be handled, manipulated or displayed. * * @param string $source Filename to gather information on. * @param string $DefaultFilter Associated directory filter. * @return FileInfo */ function FileInfo($source, $DefaultFilter = 'Default') { global $user_root; if (!file_exists($source)) Error("FileInfo: File/Directory does not exist. ({$source})
\n"); $this->owned = strlen(strstr($source, $user_root)) > 0; $this->bitpos = 0; $this->path = $source; $this->dir = dirname($source); $this->filename = basename($source); $this->show = true; $finfo = $this->dir.'/.'.$this->filename; if (file_exists($finfo)) $this->info = @unserialize(file_get_contents($finfo)); else $this->info = array(); $this->GetFilter($source, $DefaultFilter); if (is_dir($source)) $this->type = 'folder'; if (!$this->Filter->GetInfo($this)) $this->show = false; } /** * Returns the filter that was explicitely set on this object, object's * directory, or fall back on the default filter. * * @param string $path Path to file to get filter of. * @param string $default Default filter to fall back on. * @return DirFilter */ function GetFilter($path, $default = 'Default') { if (is_file($path)) { $dirname = substr(strrchr('/'.$this->dir, '/'), 1); $dinfo = dirname($path).'/../.'.$dirname; if (file_exists($dinfo)) { $dinfo = unserialize(file_get_contents($dinfo)); $this->info = array_merge($dinfo, $this->info); } } if (isset($this->info['type'])) { $name = $this->info['type']; if (class_exists("Filter{$name}")) { $objname = "Filter$name"; return $this->Filter = new $objname(); } } if (isset($default)) { $name = $default; if (class_exists("Filter$name")) { $objname = "Filter$name"; return $this->Filter = new $objname(); } } return $this->Filter = new FilterDefault(); }