Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
Downloads
/
vfm-admin
/
class
:
class.location.php
Voltar
Back Up
Advanced Editor
Save
<?php /** * Holds the informations about path location * * @category PHP * @package VenoFileManager * @author Nicola Franchini <info@veno.it> * @license Exclusively sold on CodeCanyon * @link http://filemanager.veno.it/ */ if (!class_exists('Location', false)) { /** * Location class * * @category PHP * @package VenoFileManager * @author Nicola Franchini <info@veno.it> * @license Exclusively sold on CodeCanyon * @link http://filemanager.veno.it/ */ class Location { public $path; /** * Set the current directory * * @param string $getdir explicit dir to point * * @return current directory */ public function __construct($getdir = false) { global $setUp; $getdir = $getdir ? $getdir : filter_input(INPUT_GET, 'dir', FILTER_SANITIZE_SPECIAL_CHARS); // if (!$getdir || !is_dir($getdir)) { if (!$getdir) { $this->path = $this->splitPath($setUp->getConfig('starting_dir')); } else { $this->path = $this->splitPath($getdir); } } /** * Split a file path into array elements * * @param string $dir directory to split * * @return $path2 */ public static function splitPath($dir) { global $setUp; $dir = stripslashes($dir); $path1 = preg_split("/[\\\\\/]+/", $dir); $path2 = array(); // if (is_dir($dir)) { for ($i = 0; $i < count($path1); $i++) { if ($path1[$i] == '..' || $path1[$i] == '.' || $path1[$i] == '') { continue; } $path2[] = $path1[$i]; } // } if (count($path2) < 1 && strlen($setUp->getConfig('starting_dir')) > 2) { $path2[] = $setUp->getConfig('starting_dir'); } return $path2; } /** * Get the current directory. * * @param boolean $prefix Include the prefix ("./") * @param boolean $encoded URL-encode the string * @param boolean $html HTML-encode the string * @param int $upper return directory n-levels up * @param string $dir relative path * * @return $dir */ public function getDir($prefix, $encoded, $html, $upper, $dir = false) { //$dir = ''; if (!$dir && $prefix == true) { $dir = './'; } if (!$dir) { $dir = ''; } for ($i = 0; $i < ((count($this->path) >= $upper && $upper > 0) ? count($this->path) - $upper : count($this->path)); $i++) { $temp = $this->path[$i]; if ($encoded) { $temp = rawurlencode($temp); } if ($html) { $temp = htmlspecialchars($temp); } $dir .= Utils::extraChars($temp).'/'; } return $dir; } /** * Get directory link for breadcrumbs * * @param int $level breadcrumb level * @param boolean $html HTML-encode the name * * @return path name */ public function getPathLink($level, $html) { if ($html) { return htmlspecialchars($this->path[$level]); } else { return $this->path[$level]; } } /** * Get full directory path * * @param string $path dir path * * @return path name */ public function getFullPath($path = false) { global $setUp; $fullpath = (strlen($setUp->getConfig('basedir')) > 0 ? $setUp->getConfig('basedir') : str_replace('\\', '/', dirname(dirname(dirname(realpath(__FILE__))))))."/".$this->getDir(false, false, false, 0); $fullpath = Utils::extraChars($fullpath); return $fullpath; } /** * Get clean directory path * * @return path name */ public function getCleanPath() { global $setUp; $thispath = $this->getDir(true, false, false, 0); $fullpath = str_replace($setUp->getConfig('starting_dir'), '', $thispath); return $fullpath; } /** * Check if editing is allowed into the current directory, * based on configuration settings * * @param string $relative relative path to index.php * * @return true/false */ public function editAllowed($relative = false) { global $setUp; $totdirs = count($this->path); $father = $this->getDir(false, true, false, $totdirs -1); $hidden_dirs = $setUp->getConfig('hidden_dirs'); if (!$hidden_dirs) { return false; } if (in_array(basename($father), $hidden_dirs)) { return false; } if ($this->checkUserDir($relative) === true) { return true; } return false; } /** * Check if directory is available for user * * @param string $relative relative path to index.php * * @return true/false */ public function checkUserDir($relative = false) { global $gateKeeper; global $setUp; $thispath = $this->getDir(true, false, false, 0, $relative); if (!is_dir(realpath($thispath))) { return false; } $getUserDirs = $gateKeeper->getUserInfo('dir'); $userpatharray = $getUserDirs ? json_decode($getUserDirs, true) : array(); if (empty($userpatharray)) { return true; } $startdir = $setUp->getConfig('starting_dir'); $thiscleanpath = ltrim($thispath, './'); $cleanstartdir = rtrim(ltrim($startdir, './'), '/'); $thispatharray = explode('/', $thiscleanpath); if ($thispatharray[0] === $cleanstartdir && strlen($cleanstartdir)) { array_shift($thispatharray); } $checkpatharray = $thispatharray; $checkpath = ''; foreach ($checkpatharray as $key => $value) { if ($key > 0) { $checkpath .= '/'; } $checkpath .= $value; if (in_array($checkpath, $userpatharray)) { return true; } } return false; } /** * Check if current directory is writeable * * @return true/false */ public function isWritable() { return is_writable($this->getDir(true, false, false, 0)); } /** * Create links to logout, delete and open directory * * @param boolean $logout set logout * @param string $delete path to delete * @param string $dir path to link * * @return link */ public function makeLink($logout, $delete, $dir) { $link = '?'; if ($logout == true) { $link .= 'logout'; return $link; } $link .= 'dir='.$dir; if ($delete != null) { $link .= '&del='.base64_encode($delete); } return $link; } } }