<?php /** * VFM - veno file manager: ajax/get-dirs.php * Send folders to datatables * * PHP version >= 5.3 * * @category PHP * @package VenoFileManager * @author Nicola Franchini <support@veno.it> * @copyright 2013-2022 Nicola Franchini * @license Exclusively sold on CodeCanyon * @link http://filemanager.veno.it/ */ if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest') ) { exit; } @set_time_limit(0); require_once dirname(__DIR__).'/class/class.utils.php'; require_once dirname(__DIR__).'/class/class.setup.php'; require_once dirname(__DIR__).'/class/class.gatekeeper.php'; require_once dirname(__DIR__).'/class/class.location.php'; $setUp = new SetUp(); $gateKeeper = new GateKeeper(); $response = array(); $totaldata = array(); $response['recordsTotal'] = 0; $response['recordsFiltered'] = 0; $request = $_GET; $getdir = isset($request['dir_b64']) ? filter_var($request['dir_b64'], FILTER_SANITIZE_SPECIAL_CHARS) : false; $locdir = $getdir ? '../../'.base64_decode($getdir) : false; $location = new Location($locdir); if ($gateKeeper->isAccessAllowed() && $gateKeeper->isAllowed('viewdirs_enable')) { $fullpath = $location->getFullPath(); $searchvalue = filter_var($request['search']['value'], FILTER_SANITIZE_SPECIAL_CHARS); include_once dirname(__DIR__).'/class/class.dir.php'; include_once dirname(__DIR__).'/class/class.dirs.php'; $thedirs = new Dirs($location, $fullpath, '../../'); $getdirs = $thedirs->dirs; if (!is_array($getdirs)) { $getdirs = array(); } $response ['recordsTotal'] = count($getdirs); $response["draw"] = isset($request['draw']) ? intval($request['draw']) : 0; $length = isset($request['length']) ? intval($request['length']) : 10; $start = isset($request['start']) ? intval($request['start']) : 0; $sortby = isset($request['order'][0]['column']) ? intval($request['order'][0]['column']) : 1; $orderdir = isset($request['order'][0]['dir']) ? $request['order'][0]['dir'] : 'desc'; $search = strlen($searchvalue) > 1 ? $searchvalue : false; // Search item if ($search) { $search = Utils::normalizeSrc($search); foreach ($getdirs as $key => $getdir) { $unaccent = Utils::normalizeSrc(Utils::normalizeName($getdir->getNameHtml())); if (stripos($unaccent, $search) === false) { unset($getdirs[$key]); } } } // Sort by date if ($sortby == 2) { usort( $getdirs, function ($a, $b) { return $a->getModTime() - $b->getModTime(); } ); } // Sort by name if ($sortby == 1) { usort( $getdirs, function ($a, $b) { return strnatcasecmp($a->getNameHtml(), $b->getNameHtml()); } ); } // Reverse sorting if ($orderdir == 'desc') { $getdirs = array_reverse($getdirs); } $alt = $setUp->getConfig('salt'); $altone = $setUp->getConfig('session_name'); $response ['recordsFiltered'] = count($getdirs); $counter = 0; $totcounter = 0; foreach ($getdirs as $key => $dir) { $totcounter++; // Start output at start paging if ($totcounter > $start) { $counter++; // Exit if reach length if ($length !== -1 && $counter > $length) { break; } $data = array(); $dirname = $dir->getName(); $normalized = Utils::normalizeName($dirname); $dirpath = $fullpath.$dirname; $dirtime = $setUp->formatModTime($dir->getModTime()); $locationDir = urlencode($location->getDir(false, false, false, 0)); $del = $locationDir.$dir->getNameEncoded(); $delquery = base64_encode($del); $cash = md5($delquery.$alt.$altone); $thislink = $location->makeLink(false, null, $del); $thisdel = $location->makeLink(false, $del, $locationDir); $thisdir = urldecode($locationDir); $dash = md5($alt.base64_encode($thisdir.$normalized).$altone); if ($setUp->getConfig("show_folder_counter") === true) { $quanti = $dir->countContents('../../'.$location->getDir(false, false, false, 0).$dirname); $quantifiles = $quanti['files']; $quantedir = $quanti['folders']; $data['counter'] = '<a href="'.$thislink.'"><span class="badge rounded-pill bg-light"><i class="bi bi-folder"></i> '.$quantedir.'</span> <span class="badge rounded-pill bg-light"><i class="bi bi-files"></i> '.$quantifiles.'</span></a>'; } else { $data['counter'] = ''; } $data['folder_name'] = '<div class="relative"> <a class="w-100" href="'.$thislink.'"><span class="icon text-center"><i class="bi bi-folder-fill"></i> '.$normalized.'</span></a> <span class="hover end-0"><i class="bi bi-folder-symlink"></i></span></div>'; $data['last_change'] = $dirtime; // Mobile dropdown. if ($setUp->getConfig('download_dir_enable') || $gateKeeper->isAllowed('rename_dir_enable') || $gateKeeper->isAllowed('delete_dir_enable') ) { $data['mini_menu'] = '<div class="dropdown"><a class="round-btn btn-mini dropdown-toggle" data-bs-toggle="dropdown" href="#"><i class="bi bi-gear-wide-connected"></i></a><ul class="dropdown-menu dropdown-menu-right">'; if ($setUp->getConfig("download_dir_enable") === true && $gateKeeper->isAllowed('download_enable')) { $data['mini_menu'] .= '<li> <a class="zipdir dropdown-item" data-zip="'.base64_encode($thisdir.$normalized).'" data-dash="'.$dash.'" data-thisname="'.$normalized.'" href="javascript:void(0)"> <i class="bi bi-cloud-arrow-down"></i> '.$setUp->getString("download").'</a></li>'; } if ($gateKeeper->isAllowed('rename_dir_enable')) { $data['mini_menu'] .= '<li> <a class="rename dropdown-item" data-thisdir="'.$thisdir.'" data-oldname="'.base64_encode($dirname).'" data-thisname="'.$normalized.'" href="javascript:void(0)" > <i class="bi bi-pencil-square"></i> '.$setUp->getString("rename").'</a></li>'; } if ($gateKeeper->isAllowed('delete_dir_enable')) { $data['mini_menu'] .= '<li><a class="del dropdown-item" data-link="'.$thisdel.'&h='.$cash.'&fa='.$delquery.'" data-name="'.$normalized.'" href="javascript:void(0)"> <i class="bi bi-trash"></i> '.$setUp->getString("delete").'</a></li>'; } $data['mini_menu'] .= '</ul></div></td>'; } // END mobile dropdown. if ($setUp->getConfig("download_dir_enable") && $gateKeeper->isAllowed('download_enable')) { $data['download_dir'] = '<button class="round-btn btn-mini zipdir" data-zip="'.base64_encode($thisdir.$normalized).'" data-dash="'.$dash.'" data-thisname="'.$normalized.'"> <i class="bi bi-cloud-download"></i></button>'; } if ($gateKeeper->isAllowed('rename_dir_enable')) { $data['rename_dir'] = ' <button class="round-btn btn-mini rename" data-thisdir="'.$thisdir.'" data-oldname="'.base64_encode($dirname).'" data-thisname="'.$normalized.'"> <i class="bi bi-pencil-square"></i></button>'; } if ($gateKeeper->isAllowed('delete_dir_enable')) { $data['delete_dir'] = '<button class="round-btn btn-mini del" data-name="'.$normalized.'" data-link="'.$thisdel.'&h='.$cash.'&fa='.$delquery.'"> <i class="bi bi-x-lg"></i></button>'; } array_push($totaldata, $data); } // end service menu } // END foreach dir } // end allowed $response['data'] = $totaldata; echo json_encode($response); exit;