File "tree_jsTree_readDir.php"

Full Path: /home/analogde/www/JAVA/system/tree_jsTree_readDir.php
File size: 7.1 KB
MIME-type: text/x-php
Charset: utf-8

<?php
/***************************************************************
*  Copyright notice
*
*  (c) 2003-2004 Tobias Bender (tobias@phpXplorer.org)
*  All rights reserved
*
*  This script is part of the phpXplorer project. The phpXplorer project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*  A copy is found in the textfile GPL.txt distributed with these scripts.
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/

require(dirname(__FILE__) . "/config.php");

$path = getRequestVar("path");

if(isset($path)){
	$path = substr($path, 2);
	$path = str_replace("|", "/", $path);
	$path = $path != "" ? $PXP_basedir . "/" . $path : $PXP_basedir;
}else{
	$path = $PXP_basedir;
}

require(dirname(__FILE__) . "/checkSharePermission.php");
require(dirname(__FILE__) . "/readFiletypes.php");
require(dirname(__FILE__) . "/getTypeKeyByExtension.php");

if(!checkSharePermission())
	die($PXP_languages[$PXP_language]['accessDenied'] . " (805)");

if($PXP_user != "root"){

	$PXP_user_rightsOpen_byName = Array();
	$PXP_user_rightsOpen_byTypekey = Array();

	$PXP_system_rightsOpen_byName = Array();
	$PXP_system_rightsOpen_byTypekey = Array();

	# include system right files ($PXP_dir/rights.pxrf) first
	if(is_dir($PXP_dir . "/rights.pxrf")){

		$d = dir($PXP_dir . "/rights.pxrf");
	
		while($file = $d->read())
		  if($file != "." AND $file != "..")
				if(!is_dir($PXP_dir . "/rights.pxrf/" . $file)){

					# is there a right file for everybody ?
					if(file_exists($PXP_dir . "/rights.pxrf/%.pxr.php"))
						require($PXP_dir . "/rights.pxrf/%.pxr.php");

					# are there right files for all roles of the current user ?
					foreach($PXP_user_roles as $role)
						if(file_exists($PXP_dir . "/rights.pxrf/" . $role . ".pxr.php"))
							require($PXP_dir . "/rights.pxrf/" . $role . ".pxr.php");

					# is there a right file for the current user ?
					if(file_exists($PXP_dir . "/rights.pxrf/" . $PXP_user . ".pxr.php"))
						require($PXP_dir . "/rights.pxrf/" . $PXP_user . ".pxr.php");

				}

		if(isset($PXP_rightsOpen_byName))
			foreach($PXP_rightsOpen_byName as $member => $value)
				$PXP_system_rightsOpen_byName = array_merge($PXP_system_rightsOpen_byName, $PXP_rightsOpen_byName[$member]);
		
		if(isset($PXP_rightsOpen_byTypekey))
			foreach($PXP_rightsOpen_byTypekey as $member => $value)
				$PXP_system_rightsOpen_byTypekey = array_merge($PXP_system_rightsOpen_byTypekey, $PXP_rightsOpen_byTypekey[$member]);

		$PXP_rightsOpen_byName_inherit = Array();
		$PXP_rightsOpen_byName = Array();
		$PXP_rightsOpen_byTypekey_inherit = Array();
		$PXP_rightsOpen_byTypekey = Array();
		$PXP_rightsOpen_byPath_invert = Array();
		$PXP_rightsOpen_byPath = Array();
	}
}

function readDirectory($dir, $reload = false){
	GLOBAL $PXP_system_rightsOpen_byName, $PXP_system_rightsOpen_byTypekey;
	GLOBAL $byPathMembers;
	GLOBAL $PXP_rights_dir, $PXP_user, $PXP_user_roles;
	GLOBAL $PXP_user_rightsOpen_byName, $PXP_user_rightsOpen_byTypekey;
	GLOBAL $PXP_rightsOpen_byName, $PXP_rightsOpen_byTypekey;
	GLOBAL $PXP_rightsOpen_byPath_invert, $PXP_rightsOpen_byPath;
	GLOBAL $PXP_tree_reload, $PXP_basedir;
	GLOBAL $PXP_languages, $PXP_language;
	GLOBAL $TP_possibleActions;
	
	GLOBAl $path;

	if($PXP_user != "root"){
	
		$pxrf = $dir . "/" . $PXP_rights_dir;
	
		$PXP_rightsOpen_byPath_invert = Array();
		$PXP_rightsOpen_byPath = Array();
		
		$members = Array();
		$byPathMembers = Array();
		
		if(is_dir($pxrf)){

			# is there a right file for everybody ?
			if(file_exists($pxrf . "/%.pxr.php")){
				require($pxrf . "/%.pxr.php");
				array_push($members, "%");
			}

			# are there right files for all roles of the current user ?
			foreach($PXP_user_roles as $role)
				if(file_exists($pxrf . "/" . $role . ".pxr.php")){
					require($pxrf . "/" . $role . ".pxr.php");
					array_push($members, $role);
				}

			# is there a right file for the current user ?
			if(file_exists($pxrf . "/" . $PXP_user . ".pxr.php")){
				require($pxrf . "/" . $PXP_user . ".pxr.php");
				array_push($members, $PXP_user);
			}


			$PXP_user_rightsOpen_byName = Array();
			$PXP_user_rightsOpen_byTypekey = Array();
			
			$byPathMembers = Array();
			
			# merge all rights concering the current user to one array
			foreach($members as $member){

				if(!is_array($PXP_rightsOpen_byName[$member]))continue;
	
				if(sizeof($PXP_rightsOpen_byPath[$member]) > 0)
					array_push($byPathMembers, $member);
	
				$PXP_user_rightsOpen_byName = array_merge($PXP_user_rightsOpen_byName, $PXP_rightsOpen_byName[$member]);
				$PXP_user_rightsOpen_byTypekey = array_merge($PXP_user_rightsOpen_byTypekey, $PXP_rightsOpen_byTypekey[$member]);
			}
		}
		
		$PXP_user_rightsOpen_byName = array_merge($PXP_user_rightsOpen_byName, $PXP_system_rightsOpen_byName);
		$PXP_user_rightsOpen_byTypekey = array_merge($PXP_user_rightsOpen_byTypekey, $PXP_system_rightsOpen_byTypekey);
	}
	
	$files = Array();
	$filesTypes = Array();
	
  $d = @dir($dir);

	if($d === FALSE){
		return "[['" . $PXP_languages[$PXP_language]["accessDeniedByFilesystem"] . "', ['javascript:', '', 'permission_denied']]]";
	}else{
	  while($file = $d->read()){
	    if($file != "." and $file != ".."){
	      if(is_dir($dir . "/" . $file)){

					$extKey = strpos($file, ".") === false ? "folder" : getTypeKeyByExtension($file);

					if($PXP_user != "root"){
			
						$allowOpen = true;
					
#						$extKey = strpos($file, ".") === false ? "folder" : getTypeKeyByExtension($file);
				
						if(in_array($extKey, $PXP_user_rightsOpen_byTypekey) or in_array($file, $PXP_user_rightsOpen_byName))
							continue;
				
						foreach($byPathMembers as $member){
				
							if($PXP_rightsOpen_byPath_invert[$member]){
								$allowOpen = in_array($file, $PXP_rightsOpen_byPath[$member]);
							}else{
								$allowOpen = !in_array($file, $PXP_rightsOpen_byPath[$member]);
							}
						}
					
						if(!$allowOpen)
							continue;
					}
				
					array_push($files, $file);
					$filesTypes[$file] = $extKey;
	    	}
			}
  	}
		$d->close();
  }

	if($reload)
		if($dir != $path)
			return sizeof($files) > 0 ? "[]" : "";
	
	asort($files);
	
	if(sizeof($files) > 0){
		$arrFiles = Array();
		
		$c = "[";
				
		foreach($files as $file){
			if($TP_possibleActions[$filesTypes[$file]]["open"]){
				array_push($arrFiles, "['$file', ['javascript:changeDir(\"" . urlencode($dir . "/" . $file) . "\")',null,'closed_folder']," . readDirectory($dir . "/" . $file, $reload) . "]");
			}else{
				array_push($arrFiles, "['$file', ['javascript:var x',null,'closed_folder']," . readDirectory($dir . "/" . $file, $reload) . "]");
			}
		}
		
		$c .= implode(",", $arrFiles) . "]";
		
		return $c;
	}
}
?>