mirror of
https://github.com/jimeh/dlist.git
synced 2026-02-19 07:56:41 +00:00
Initial import
git-svn-id: file:///Users/jimeh/Desktop/dlist/trunk@1 a5845835-ea0f-0410-a762-dd0bfe9bfde8
This commit is contained in:
191
libs/dirlist.lib.php
Normal file
191
libs/dirlist.lib.php
Normal file
@@ -0,0 +1,191 @@
|
||||
<?php
|
||||
|
||||
class dirlist {
|
||||
|
||||
/*
|
||||
|
||||
dirlist v2.0 beta
|
||||
Copyright © 2006 Jim Myhrberg.
|
||||
zynode@gmail.com
|
||||
|
||||
*/
|
||||
|
||||
// General settings
|
||||
var $default_sort = 'name,mtime,size';
|
||||
var $folders_first = true;
|
||||
var $show_hidden = false;
|
||||
|
||||
// Sorting
|
||||
var $sort_items = true;
|
||||
var $sort_reverse = false;
|
||||
|
||||
// Smart date formatting
|
||||
var $smartdate = '{date}, {time}';
|
||||
var $smartdate_date = 'F d, Y';
|
||||
var $smartdate_time = 'H:i';
|
||||
|
||||
|
||||
// Internals
|
||||
var $error = false;
|
||||
var $this_dir;
|
||||
var $list = array();
|
||||
var $sort_by = array();
|
||||
|
||||
var $stats_count = 0;
|
||||
var $stats_files = 0;
|
||||
var $stats_folders = 0;
|
||||
var $stats_totalsize = 0;
|
||||
|
||||
// Construtor
|
||||
function dirlist() {
|
||||
|
||||
}
|
||||
|
||||
// ==============================================
|
||||
// ----- [ Main Functions ] ---------------------
|
||||
// ==============================================
|
||||
|
||||
function read ($dir) {
|
||||
if(!preg_match("/\/$/", $dir)) $dir .= '/';
|
||||
$this->sort_by = explode(',', $this->default_sort);
|
||||
if($dh = @opendir($dir)) {
|
||||
$this->this_dir = $this->getDetails($dir);
|
||||
while(false !== ($item = readdir($dh))) {
|
||||
$hidden_item = ( $this->show_hidden ) ? false : preg_match("/^\./", $item) ;
|
||||
if( ($item != '.' && $item != '..') && !$hidden_item ) {
|
||||
$item_details = $this->getDetails($dir.$item);
|
||||
// stats
|
||||
$this->stats_count++;
|
||||
if ( $item_details['type'] == 'file' ) {
|
||||
$this->stats_totalsize += $item_details['size_raw'];
|
||||
$this->stats_files++;
|
||||
} else {
|
||||
$this->stats_folders++;
|
||||
}
|
||||
// sorting
|
||||
$list_key = ( $this->folders_first ) ? $item_details['type'].'|' : '' ;
|
||||
foreach( $this->sort_by as $v ) {
|
||||
if ( $v == 'size' ) $v = 'size_raw';
|
||||
$list_key .= ( $v == 'size_raw' || $v == 'mtime' ) ? str_pad($item_details[$v], 28, '0', STR_PAD_LEFT).'|' : $item_details[$v].'|' ;
|
||||
}
|
||||
$this->list[$list_key] = $this->getDetails($dir.$item);
|
||||
}
|
||||
}
|
||||
if ( $this->sort_items ) {
|
||||
( $this->sort_reverse ) ? krsort($this->list) : ksort($this->list) ;
|
||||
}
|
||||
return true;
|
||||
}else{ $this->error = true; return false; }
|
||||
closedir($dh);
|
||||
}
|
||||
|
||||
function getDetails ($item) {
|
||||
$item = str_replace("\\", '/', $item);
|
||||
$return['name'] = ( preg_match("/^.*\/(.*)/", $item, $name) ) ? $name[1] : $item ;
|
||||
|
||||
// Owner and Group
|
||||
if ( ($group = $this->getGroup($item)) != false ) $return = array_merge($return, $group);
|
||||
if ( ($owner = $this->getOwner($item)) != false ) $return = array_merge($return, $owner);
|
||||
|
||||
// Last Modified
|
||||
$return['mtime'] = filemtime($item);
|
||||
$return['mtimef'] = $this->smartDate($return['mtime'], $this->smartdate_date, $this->smartdate_time, $this->smartdate);
|
||||
|
||||
// Permissions and CHMOD value
|
||||
$return['perms'] = $this->format_perms(fileperms($item));
|
||||
$return['chmod'] = substr(sprintf('%o', fileperms($item)), -4);
|
||||
|
||||
$return['type_raw'] = filetype($item);
|
||||
|
||||
if ( is_file($item) ) {
|
||||
$return['type'] = 'file';
|
||||
$return['ext'] = ( preg_match("/^.*\.(.*)/", $return['name'], $ext) ) ? $ext[1] : '' ;
|
||||
$return['size_raw'] = filesize($item);
|
||||
$return['size'] = $this->format_filesize($return['size_raw']);
|
||||
} elseif ( is_dir($item) ) {
|
||||
$return['type'] = 'dir';
|
||||
$return['ext'] = '';
|
||||
$return['size_raw'] = '';
|
||||
$return['size'] = '-';
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
// ==============================================
|
||||
// ----- [ Internal Functions ] -----------------
|
||||
// ==============================================
|
||||
|
||||
function format_filesize($bytes) {
|
||||
$types = array('bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
|
||||
for($n = 0; $bytes >= 1024; $n++) $bytes = $bytes / 1024;
|
||||
$bytes = number_format($bytes, 2);
|
||||
if ( !empty($bytes[1]) ) {
|
||||
$bytes = explode('.', $bytes);
|
||||
$bytes[1] = rtrim($bytes[1], '0');
|
||||
$bytes = ( $bytes[1] != '' ) ? $bytes[0].'.'.$bytes[1] : $bytes[0] ;
|
||||
}
|
||||
return $bytes.' '.$types[$n];
|
||||
}
|
||||
|
||||
function smartDate ($timestamp, $datef='jS M, Y', $timef='H:i', $mainf='{date}, {time}') {
|
||||
$array = array('Today'=>0, 'Yesterday'=>-1, '2 days ago'=>-2, '3 days ago'=>-3, 'Tomorrow'=>1);
|
||||
$now = time();
|
||||
// check if timestamp is more than 96 hours ago
|
||||
if ( $timestamp >= ($now - 345600) ) {
|
||||
$check = date("d:m:Y", $timestamp);
|
||||
foreach ( $array as $key => $value ) {
|
||||
$test = date("d:m:Y", ($now + (86400 * $value) ) );
|
||||
if( $check == $test ) {
|
||||
$return = str_replace('{date}', $key, $mainf);
|
||||
return str_replace('{time}', date($timef, $timestamp), $return);
|
||||
}
|
||||
}
|
||||
}
|
||||
$return = str_replace('{date}', date($datef, $timestamp), $mainf);
|
||||
return str_replace('{time}', date($timef, $timestamp), $return);
|
||||
}
|
||||
|
||||
function format_perms($perms) {
|
||||
if (($perms & 0xC000) == 0xC000) { $info = 's';
|
||||
} elseif (($perms & 0xA000) == 0xA000) { $info = 'l';
|
||||
} elseif (($perms & 0x8000) == 0x8000) { $info = '-';
|
||||
} elseif (($perms & 0x6000) == 0x6000) { $info = 'b';
|
||||
} elseif (($perms & 0x4000) == 0x4000) { $info = 'd';
|
||||
} elseif (($perms & 0x2000) == 0x2000) { $info = 'c';
|
||||
} elseif (($perms & 0x1000) == 0x1000) { $info = 'p';
|
||||
} else { $info = 'u'; }
|
||||
// Owner
|
||||
$info .= (($perms & 0x0100) ? 'r' : '-');
|
||||
$info .= (($perms & 0x0080) ? 'w' : '-');
|
||||
$info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-'));
|
||||
// Group
|
||||
$info .= (($perms & 0x0020) ? 'r' : '-');
|
||||
$info .= (($perms & 0x0010) ? 'w' : '-');
|
||||
$info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-'));
|
||||
// World
|
||||
$info .= (($perms & 0x0004) ? 'r' : '-');
|
||||
$info .= (($perms & 0x0002) ? 'w' : '-');
|
||||
$info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-'));
|
||||
return $info;
|
||||
}
|
||||
|
||||
function getOwner ($item) {
|
||||
if ( function_exists('posix_getpwuid') ) {
|
||||
$id = fileowner($item);
|
||||
$name = posix_getpwuid($id);
|
||||
return array('ownerid'=>$id, 'owner'=>$name['name']);
|
||||
} else { return false; }
|
||||
}
|
||||
|
||||
function getGroup ($item) {
|
||||
if ( function_exists('posix_getgrgid') ) {
|
||||
$id = filegroup($item);
|
||||
$name = posix_getgrgid($id);
|
||||
return array('groupid'=>$id, 'group'=>$name['name']);
|
||||
} else { return false; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user