<?php
/**
 * Manage the folder archive
 *
 * @category PHP
 * @package  VenoFileManager
 * @author   Nicola Franchini <info@veno.it>
 * @license  Exclusively sold on CodeCanyon
 * @link     http://filemanager.veno.it/
 */
if (!class_exists('Dirs', false)) {
    /**
     * Class Dirs
     *
     * @category PHP
     * @package  VenoFileManager
     * @author   Nicola Franchini <info@veno.it>
     * @license  Exclusively sold on CodeCanyon
     * @link     http://filemanager.veno.it/
     */
    class Dirs
    {
        public $location,
        $dirs,
        $fullpath;

        /**
         * Constructor
         *
         * @param string $location Current location
         * @param string $fullpath Full location path
         * @param string $relative Relative path to index.php
         *
         * @return all file data
         */
        public function __construct($location, $fullpath, $relative = '')
        {
            $this->location = $location;
            $this->openDir($fullpath, $relative);
        }

        /**
         * Read the file list from the directory
         *
         * @param string $fullpath Full location path
         * @param string $relative Relative path to index.php
         *
         * @return Reading the data of files and directories
         */
        public function openDir($fullpath, $relative = '')
        {
            global $setUp;
            global $gateKeeper;

            $totdirs = count($this->location->path);
            $father = $this->location->getDir(false, true, false, $totdirs -1);
            $hidden_dirs = $setUp->getConfig('hidden_dirs');
            $startingdir = $setUp->getConfig('starting_dir');
            // check if any folder is assigned to the current user
            $userpatharray = $gateKeeper->getUserInfo('dir') !== null ? json_decode($gateKeeper->getUserInfo('dir'), true) : false;

            // Block reading hidden dirs
            if (in_array(basename($father), $hidden_dirs)) {
                Utils::setError($setUp->getString('unable_to_read_dir'));
                return false;
            }

            $hidefiles = false;

            if (strlen($startingdir) < 3 && $startingdir === $this->location->getDir(true, true, false, 0)) {
                $hidefiles = true;
            }

            if (is_dir($fullpath)) {
                $fullpath = Utils::preGLob($fullpath);
                $content = glob($fullpath.'/*');

                $this->dirs = array();

                if (is_array($content)) {
                    foreach ($content as $item) {

                        if (is_dir($item)) {

                            $mbitem = Utils::mbPathinfo($item);
                            $item_basename = $mbitem['basename'];

                            // get only users' assigned folders if any
                            if ($userpatharray && !in_array($item_basename, $userpatharray) && !$this->location->editAllowed($relative)) {
                                continue;
                            }
                        
                            // Skip /vfm-admin/ if the main uploads dir is the root
                            if (!$hidefiles || ($hidefiles && !in_array($item_basename, $hidden_dirs))) {
                                $this->dirs[] = new Dir($item_basename, $this->location, $relative);
                            }
                        }
                    }
                }
            }
        }
    }
}
