File "unitecreator_assets.class.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/unlimited-elements-for-elementor/inc_php/unitecreator_assets.class.php
File size: 39.04 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?php

defined('UNLIMITED_ELEMENTS_INC') or die('Restricted access');
class UniteCreatorAssets
{
    const OPTION_WRAPPER_STYLE = "wrapper_style";
    const OPTION_ID = "id";
    const OPTION_CHECKBOX_ON_TYPES = "checkboxes_on_types";
    const OPTION_SHOW_ONLY_TYPES = "show_only_types";
    const OPTION_FILTER_FOLDER_NAMES = "filter_folder_names";
    const OPTION_DISABLE_CHECKBOXES = "disable_checkboxes";
    const OPTION_PUT_ACTIVEPATH = "put_activepath";
    const OPTION_FOLDERS_ONLY = "folders_only";
    const OPTION_SINGLE_ITEM_SELECT = "single_item_select";
    const OPTION_THUMBS_VIEW = "is_thumbs_view";
    const OPTION_SHOW_FILE_EXTENTIONS = "show_file_extensions";
    const FILETYPE_ALLOWED = "allowed";
    const FILETYPE_DEFAULT = "default";
    const FILETYPE_IMAGE = "image";
    const FILETYPE_AUDIO = "audio";
    const FILETYPE_CSS = "css";
    const FILETYPE_PHP = "php";
    const FILETYPE_JS = "js";
    const FILETYPE_HTML = "html";
    const FILETYPE_DOCUMENT = "document";
    const FILETYPE_VIDEO = "video";
    const FILETYPE_ZIP = "zip";
    const FILETYPE_XML = "xml";
    protected $options = array();
    private static $serial = 0;
    private $startPath = "";
    private $customStartPath = null;
    protected $pathKey;
    protected $arrCheckedUrls = array();
    protected $isBrowerMode = false;
    protected $flagPutOnce = false;
    protected $objAddon = null;
    public function __construct()
    {
        self::$serial++;
    }
    protected function setBrowserMode()
    {
        $this->isBrowerMode = true;
    }
    protected function setDefaultOptions()
    {
        $defaults = array();
        $defaults[self::OPTION_PUT_ACTIVEPATH] = true;
        $defaults[self::OPTION_FOLDERS_ONLY] = false;
        $defaults[self::OPTION_DISABLE_CHECKBOXES] = false;
        $defaults[self::OPTION_SINGLE_ITEM_SELECT] = false;
        $defaults[self::OPTION_THUMBS_VIEW] = false;
        $defaults[self::OPTION_SHOW_FILE_EXTENTIONS] = true;
        $this->options = $defaults;
    }
    protected function setCheckedUrls($arrUrls)
    {
        $this->arrCheckedUrls = $arrUrls;
    }
    protected function setCheckedFiles($path, $arrFiles)
    {
        if (empty($arrFiles)) {
            return false;
        }
        if (is_array($arrFiles) == false) {
            $arrFiles = array($arrFiles);
        }
        $this->sanitizePath($path);
        $urlDir = $this->getUrlDir($path);
        $arrUrls = array();
        foreach ($arrFiles as $file) {
            $url = $urlDir . $file;
            $arrUrls[] = $url;
        }
        $this->setCheckedUrls($arrUrls);
    }
    protected function setStartPath($startPath)
    {
        $startPath = UniteFunctionsUC::pathToUnix($startPath);
        $this->startPath = $startPath;
    }
    private function a_VALIDATIONS()
    {
    }
    protected function validateInited()
    {
        if (empty($this->pathKey)) {
            UniteFunctionsUC::throwError("assets not inited");
        }
    }
    private function validateStartPath()
    {
        if (empty($this->startPath)) {
            UniteFunctionsUC::throwError("Path not inited");
        }
    }
    private function validatePathUnderStartPath($path)
    {
        $this->validateStartPath();
        $path = realpath($path);
        $realStartPath = realpath($this->startPath);
        $searchPos = strpos($path, $realStartPath);
        if ($searchPos !== 0) {
            UniteFunctionsUC::throwError("Wrong path, should be under start path only");
        }
    }
    private function validateFolderName($folderName)
    {
        if (strpbrk($folderName, "\\/?%*:|\"<>") !== FALSE) {
            UniteFunctionsUC::throwError("The folder name: {$folderName} is not valid");
        }
    }
    private function validateFilename($filename)
    {
        if (strpbrk($filename, "\\/?%*:|\"<>") !== FALSE) {
            UniteFunctionsUC::throwError("The file name: {$filename} is not valid");
        }
    }
    private function validateAllowedFiletype($filename)
    {
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        $fileType = $this->getFileType($filename);
        if (empty($ext)) {
            UniteFunctionsUC::throwError("Files without extension don't allowed in assets");
        }
        switch ($fileType) {
            case self::FILETYPE_PHP:
            case self::FILETYPE_DEFAULT:
                UniteFunctionsUC::throwError("File <b>{$filename}</b> type not allowed in assets");
                break;
        }
    }
    private function validateFileAllowedForEdit($filename)
    {
        $fileType = $this->getFileType($filename);
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if (empty($ext)) {
            UniteFunctionsUC::throwError("Can't edit files without extension");
        }
        switch ($fileType) {
            case self::FILETYPE_DOCUMENT:
            case self::FILETYPE_HTML:
            case self::FILETYPE_XML:
            case self::FILETYPE_JS:
            case self::FILETYPE_CSS:
                break;
            default:
                UniteFunctionsUC::throwError("File <b>{$filename}</b> type not allowed in to edit");
                break;
        }
    }
    protected function validateEditFileData($path, $filename)
    {
        $path = $this->sanitizePath($path);
        $this->validateFilename($filename);
        $this->validateFileAllowedForEdit($filename);
        $filepath = $path . $filename;
        if (file_exists($filepath) == false) {
            UniteFunctionsUC::throwError("The file: {$filename} not exists.");
        }
        return $filepath;
    }
    private function isFilenameValidForDelete($filename)
    {
        if (strpos($filename, "..") !== false) {
            return false;
        }
        if (strpos($filename, "/") !== false) {
            return false;
        }
        if (strpos($filename, "\\") !== false) {
            return false;
        }
        return true;
    }
    private function validateCreateNewFileFolder($path, $filename, $isFile = true)
    {
        $path = $this->sanitizePath($path);
        if ($isFile == true) {
            $this->validateFilename($filename);
            $this->validateAllowedFiletype($filename);
        } else {
            $this->validateFolderName($filename);
        }
        $filepath = $path . $filename;
        if (is_file($filepath) == true) {
            UniteFunctionsUC::throwError("file with name <b>{$filename}</b> already exists");
        }
        if (is_dir($filepath) == true) {
            UniteFunctionsUC::throwError("folder <b>{$filename}</b> already exists");
        }
        return $filepath;
    }
    private function a_GETTERS()
    {
    }
    private function getOption($name, $default = null)
    {
        if (array_key_exists($name, $this->options) == false) {
            return $default;
        }
        $option = $this->options[$name];
        return $option;
    }
    protected function getArrOptionsForClient()
    {
        $arrOptionNames = array(self::OPTION_SINGLE_ITEM_SELECT);
        $arrOptions = array();
        foreach ($arrOptionNames as $option) {
            $arrOptions[$option] = $this->getOption($option);
        }
        return $arrOptions;
    }
    private function getFileType($filename)
    {
        $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
        switch ($ext) {
            case "php":
                return self::FILETYPE_PHP;
                break;
            case "jpg":
            case "png":
            case "jpeg":
            case "gif":
                return self::FILETYPE_IMAGE;
                break;
            case "svg":
            case "txt":
            case "doc":
            case "ini":
            case "md":
                return self::FILETYPE_DOCUMENT;
                break;
            case "html":
            case "htm":
                return self::FILETYPE_HTML;
                break;
            case "css":
                return self::FILETYPE_CSS;
                break;
            case "js":
                return self::FILETYPE_JS;
                break;
            case "avi":
            case "mp4":
            case "ogv":
            case "webm":
                return self::FILETYPE_VIDEO;
                break;
            case "mp3":
            case "wav":
            case "flac":
            case "ogg":
            case "webm":
                return self::FILETYPE_AUDIO;
                break;
            case "zip":
                return self::FILETYPE_ZIP;
                break;
            case "json":
                return self::FILETYPE_ALLOWED;
                break;
            case "xml":
                return self::FILETYPE_XML;
                break;
            default:
                return self::FILETYPE_DEFAULT;
                break;
        }
    }
    private function getActivePath($inputPath = "")
    {
        if ($inputPath) {
            $path = $inputPath;
            if (is_dir($path) == false) {
                $path = $this->startPath;
            }
        } else {
            $path = $this->startPath;
        }
        $path = HelperUC::pathToRelative($path, false);
        return $path;
    }
    private function getStartPathRelative()
    {
        return HelperUC::pathToRelative($this->startPath, false);
    }
    private function isStartPath($path)
    {
        if (realpath($path) == realpath($this->startPath)) {
            return true;
        }
        return false;
    }
    private function isCustomStartPath($path)
    {
        if (empty($this->customStartPath)) {
            return false;
        }
        if (realpath($path) == realpath($this->customStartPath)) {
            return true;
        }
        return false;
    }
    protected function getUrlDir($pathDir)
    {
        $urlDir = HelperUC::pathToRelativeUrl($pathDir);
        $urlDir = rtrim($urlDir, "/") . "/";
        return $urlDir;
    }
    private function isCheckboxOnFile($file, $isDir)
    {
        if ($file == "..") {
            return false;
        }
        $arrExt = $this->getOption(self::OPTION_CHECKBOX_ON_TYPES);
        if (empty($arrExt)) {
            return true;
        }
        if ($isDir == true) {
            return false;
        }
        $info = pathinfo($file);
        $ext = UniteFunctionsUC::getVal($info, "extension");
        $ext = strtolower($ext);
        if (array_search($ext, $arrExt) === false) {
            return false;
        }
        return true;
    }
    private function isFileToShow($filetype)
    {
        $arrTypes = $this->getOption(self::OPTION_SHOW_ONLY_TYPES);
        if (empty($arrTypes)) {
            return true;
        }
        if (array_search($filetype, $arrTypes) !== false) {
            return true;
        }
        return false;
    }
    private function isDirToShow($dir)
    {
        $arrExcludeDirs = $this->getOption(self::OPTION_FILTER_FOLDER_NAMES);
        if (empty($arrExcludeDirs)) {
            return true;
        }
        if (array_search($dir, $arrExcludeDirs) !== false) {
            return false;
        }
        return true;
    }
    protected function getFilelistClass()
    {
        $isThumbs = $this->getOption(self::OPTION_THUMBS_VIEW);
        if ($isThumbs == true) {
            $extraClass = " uc-view-thumbs";
        } else {
            $extraClass = " uc-view-list";
        }
        $class = "uc-filelist" . $extraClass;
        return $class;
    }
    protected function getEmptyHtmlDirList()
    {
        $class = $this->getFilelistClass();
        $html = "<div class=\"{$class}\" ></div>";
        return $html;
    }
    protected function getHtmlDir($pathDir = null, $addWrapper = false)
    {
        if (empty($pathDir)) {
            $pathDir = $this->startPath;
        }
        try {
            $pathDir = $this->sanitizePath($pathDir);
        } catch (Exception $e) {
            $pathDir = $this->startPath;
        }
        $isThumbsView = $this->getOption(self::OPTION_THUMBS_VIEW);
        $urlDir = $this->getUrlDir($pathDir);
        $isStartPath = $this->isStartPath($pathDir);
        if ($isStartPath == false) {
            $isStartPath = $this->isCustomStartPath($pathDir);
        }
        $isFoldersOnly = $this->getOption(self::OPTION_FOLDERS_ONLY);
        $arrFiles = scandir($pathDir);
        $isDisableCheckboxes = $this->getOption(self::OPTION_DISABLE_CHECKBOXES);
        $isDisableCheckboxes = UniteFunctionsUC::strToBool($isDisableCheckboxes);
        $html = "";
        $classFilelist = $this->getFilelistClass();
        if ($addWrapper == true) {
            $html = "<div class=\"{$classFilelist}\" >";
        }
        $isNoFiles = count($arrFiles) == 2;
        foreach ($arrFiles as $file) {
            if ($file == ".") {
                continue;
            }
            if ($file == ".." && $isStartPath == true) {
                if ($isNoFiles == true) {
                    $emptyText = esc_html__("empty folder", "unlimited-elements-for-elementor");
                    $html .= "<div class='uc-filelist-emptytext'>{$emptyText}</div>";
                }
                continue;
            }
            $filepath = $pathDir . $file;
            $fileUrl = $urlDir . $file;
            $isDir = is_dir($filepath);
            if ($isFoldersOnly && $isDir == false) {
                continue;
            }
            if ($isDir == true) {
                $filetype = "dir";
            } else {
                $filetype = $this->getFileType($file);
            }
            if ($isDir == false) {
                $toShowFile = $this->isFileToShow($filetype);
                if ($toShowFile == false) {
                    continue;
                }
            } else {
                $toShowDir = $this->isDirToShow($file);
                if ($toShowDir == false) {
                    continue;
                }
            }
            $isSelectable = $this->isCheckboxOnFile($file, $isDir);
            $isCheckbox = $isSelectable;
            if ($isDisableCheckboxes == true) {
                $isCheckbox = false;
            }
            $htmlChecked = "";
            $addClass = "";
            if (!empty($this->arrCheckedUrls) && array_search($fileUrl, $this->arrCheckedUrls) !== false) {
                $htmlChecked = " checked data-initchecked='true'";
                $addClass = " uc-filelist-item-selected";
            }
            if ($isDir == true && $file == "..") {
                $addClass .= " uc-dir-back";
                $isSelectable = false;
            }
            if ($isSelectable == true) {
                $addClass .= " uc-filelist-selectable";
            }
            $strFile = htmlspecialchars($file);
            $showFile = $file;
            if ($isDir == false) {
                $showExtensions = $this->getOption(self::OPTION_SHOW_FILE_EXTENTIONS);
                if ($showExtensions === false) {
                    $arrInfo = pathinfo($file);
                    $showFile = $arrInfo["filename"];
                }
            }
            $html .= "<a class='uc-filelist-item uc-type-{$filetype} {$addClass}' data-type='{$filetype}' data-file='{$strFile}' data-url='{$fileUrl}' >";
            if ($isDisableCheckboxes == false) {
                $html .= "<div class='uc-filelist-checkbox-wrapper'>";
                if ($isCheckbox == true) {
                    $html .= "<input type='checkbox' class='uc-filelist-checkbox' {$htmlChecked} data-file='{$strFile}' onfocus='this.blur()'>";
                }
                $html .= "</div>";
            }
            $iconAddHtml = "";
            if ($isThumbsView == true && $filetype == self::FILETYPE_IMAGE) {
                $urlThumb = HelperUC::$operations->createThumbs($fileUrl);
                $urlThumb = HelperUC::URLtoFull($urlThumb);
                $urlThumb = htmlspecialchars($urlThumb);
                $iconAddHtml = " style=\"background-image:url('{$urlThumb}');\"";
            }
            $html .= "<div class='uc-filelist-icon uc-icon-{$filetype}'{$iconAddHtml}></div>";
            $html .= "<div class='uc-filelist-filename'>{$showFile}</div>";
            $html .= "<div class='unite-clear'></div>";
            $html .= "</a>";
        }
        if ($addWrapper == true) {
            $html .= "</div>";
        }
        return $html;
    }
    private function getArrExistsFiles($path, $arrFiles)
    {
        $path = $this->sanitizePath($path);
        if (!is_array($arrFiles)) {
            UniteFunctionsUC::throwError("getArrExistsFiles error - arrFiles should be array");
        }
        $arrExists = array();
        foreach ($arrFiles as $file) {
            $filepath = $path . $file;
            if (file_exists($filepath)) {
                $arrExists[] = $file;
            }
        }
        return $arrExists;
    }
    private function a_SETTERS()
    {
    }
    public function sanitizePath($path)
    {
        if (is_dir($path) == false) {
            $path = HelperUC::pathToAbsolute($path);
        }
        $path = UniteFunctionsUC::realpath($path);
        if (empty($path) || !is_dir($path)) {
            UniteFunctionsUC::throwError("Wrong path given");
        }
        $this->validatePathUnderStartPath($path);
        $path = UniteFunctionsUC::addPathEndingSlash($path);
        return $path;
    }
    public function setOption($option, $value)
    {
        $this->options[$option] = $value;
    }
    protected function setCustomStartPath($path)
    {
        if (empty($path)) {
            return false;
        }
        $path = $this->sanitizePath($path);
        $path = UniteFunctionsUC::pathToUnix($path);
        $this->customStartPath = $path;
    }
    private function a_ACTIONS()
    {
    }
    protected function deleteFiles($path, $arrFiles)
    {
        $path = $this->sanitizePath($path);
        foreach ($arrFiles as $filename) {
            $isValid = $this->isFilenameValidForDelete($filename);
            if ($isValid == false) {
                continue;
            }
            $filepath = $path . $filename;
            if (file_exists($filepath) == false) {
                continue;
            }
            if (is_dir($filepath)) {
                UniteFunctionsUC::deleteDir($filepath);
            } else {
                unlink($filepath);
            }
        }
    }
    protected function createFolder($path, $folderName)
    {
        $pathCreate = $this->validateCreateNewFileFolder($path, $folderName, false);
        @mkdir($pathCreate);
        if (is_dir($pathCreate) == false) {
            UniteFunctionsUC::throwError("Can't create folder <b>{$folderName}</b>, please check parent folder permissions");
        }
    }
    protected function createFile($path, $filename)
    {
        $filepath = $this->validateCreateNewFileFolder($path, $filename);
        UniteFunctionsUC::writeFile("", $filepath);
        if (is_file($filepath) == false) {
            UniteFunctionsUC::throwError("file <b>{$filename}</b> didn't created. Please check folder permissions");
        }
    }
    protected function renameFile($path, $filename, $newFilename)
    {
        $path = $this->sanitizePath($path);
        $filepathCurrent = $path . $filename;
        $this->validateFilename($filename);
        if (file_exists($filepathCurrent) == false) {
            UniteFunctionsUC::throwError("The file: {$filename} not exists");
        }
        $isFile = !is_dir($filepathCurrent);
        $filepathNew = $this->validateCreateNewFileFolder($path, $newFilename, $isFile);
        $success = @rename($filepathCurrent, $filepathNew);
        if ($success == false) {
            UniteFunctionsUC::throwError("The file didn't renamed");
        }
    }
    protected function getFileContent($path, $filename)
    {
        $filepath = $this->validateEditFileData($path, $filename);
        $content = file_get_contents($filepath);
        return $content;
    }
    protected function saveFileContent($path, $filename, $content)
    {
        $filepath = $this->validateEditFileData($path, $filename);
        UniteFunctionsUC::writeFile($content, $filepath);
    }
    protected function moveFiles($pathSource, $arrFiles, $pathTarget, $actionOnExists)
    {
        if (empty($actionOnExists)) {
            $actionOnExists = "message";
        }
        $pathSource = $this->sanitizePath($pathSource);
        $pathTarget = $this->sanitizePath($pathTarget);
        if (empty($arrFiles)) {
            UniteFunctionsUC::throwError("No files to move");
        }
        if (!is_array($arrFiles)) {
            UniteFunctionsUC::throwError("arrFiles should be array");
        }
        $arrExists = $this->getArrExistsFiles($pathTarget, $arrFiles);
        if (!empty($arrExists) && $actionOnExists == "message") {
            $numFiles = count($arrExists);
            if ($numFiles == 1) {
                $file = $arrFiles[0];
                $message = "The file <b> {$file} </b> exists in target folder.";
            } else {
                $message = "{$numFiles} already exists in target folder.";
            }
            return $message;
        }
        foreach ($arrFiles as $file) {
            $filepathSource = $pathSource . $file;
            $filepathTarget = $pathTarget . $file;
            $isTargetExists = file_exists($filepathTarget);
            if ($isTargetExists == true) {
                switch ($actionOnExists) {
                    case "overwrite":
                        $success = @rename($filepathSource, $filepathTarget);
                        break;
                    case "skip":
                        $success = true;
                        break;
                    default:
                        UniteFunctionsUC::throwError("Action on file exists not given");
                        break;
                }
            } else {
                $success = @rename($filepathSource, $filepathTarget);
            }
            if ($success == false) {
                if (is_dir($filepathSource) == true) {
                    UniteFunctionsUC::throwError("Can't move directory: <b> {$file} </b>");
                } else {
                    UniteFunctionsUC::throwError("Can't move file <b> {$file} </b>");
                }
            }
        }
        return false;
    }
    protected function unzipFile($path, $filename)
    {
        $path = $this->sanitizePath($path);
        $this->validateFilename($filename);
        $filepath = $path . $filename;
        UniteFunctionsUC::validateFilepath($filepath);
        $zip = new UniteZipUC();
        $zip->extract($filepath, $path);
    }
    private function a_OUTPUT()
    {
    }
    protected function handleUploadFile($uploadPath, $arrFile)
    {
        try {
            $this->validateStartPath();
            $filename = UniteFunctionsUC::getVal($arrFile, "name");
            $tempFilepath = UniteFunctionsUC::getVal($arrFile, "tmp_name");
            $destFilepath = $uploadPath . "/" . $filename;
            if (is_file($tempFilepath) == false) {
                UniteFunctionsUC::throwError("wrong upload filepath!");
            }
            $success = move_uploaded_file($tempFilepath, $destFilepath);
            if ($success == false) {
                UniteFunctionsUC::throwError("Upload Failed to: {$destFilepath}");
            }
        } catch (Exception $e) {
            http_response_code(406);
            echo esc_html($e->getMessage());
            if (GlobalsUC::SHOW_TRACE == true) {
                echo $e->getTraceAsString();
            }
        }
        exit;
    }
    private function putUploadFileDialog()
    {
        $nonce = "";
        if (method_exists("UniteProviderFunctionsUC", "getNonce")) {
            $nonce = UniteProviderFunctionsUC::getNonce();
        }
        $addonID = null;
        if (!empty($this->objAddon)) {
            $addonID = $this->objAddon->getID();
        }
        if ($this->flagPutOnce == true) {
            return false;
        }
        ?>
			<div id="uc_dialog_upload_files" title="<?php 
        esc_html_e("Upload Files", "unlimited-elements-for-elementor");
        ?>" style="display:none">
				
				<div class="uc-dialog-upload-inner">
					
					<div class="uc-assets-activepath">
					<?php 
        esc_html_e("Upload to folder: ", "unlimited-elements-for-elementor");
        ?> 
						<b>
						<span id="uc_dialogupload_activepath">some path</span>
						</b>
					</div>
					
					<form id="uc_form_dropzone" action="<?php 
        echo GlobalsUC::$url_ajax;
        ?>" class="dropzone">
						<input type="hidden" name="action" value="<?php 
        echo GlobalsUC::PLUGIN_NAME;
        ?>_ajax_action">
						<input type="hidden" id="uc_input_upload_path" name="upload_path" value="">
						<input type="hidden" id="uc_input_pathkey" name="pathkey" value="">
						<input type="hidden" name="client_action" value="assets_upload_files">
						
						<?php 
        if (!empty($addonID)) {
            ?>
							<input type="hidden" name="addonID" value="<?php 
            echo $addonID;
            ?>">
						<?php 
        }
        ?>
						
						<?php 
        if (!empty($nonce)) {
            ?>
						<input type="hidden" name="nonce" value="<?php 
            echo esc_attr($nonce);
            ?>">
						<?php 
        }
        ?>
					</form>
					<script type="text/javascript">
						if(typeof Dropzone != "undefined")
							Dropzone.autoDiscover = false;
					</script>
					
				</div>
				
				<br><br>
			
			</div>
		
		<?php 
    }
    private function putDialogCreateFolder()
    {
        ?>
		
		<div id="uc_dialog_create_folder" title="<?php 
        esc_html_e("Create Folder", "unlimited-elements-for-elementor");
        ?>" style="display:none" class="unite-inputs">
			
			<div class="unite-dialog-top"></div>
			<div class="unite-inputs-label"><?php 
        esc_html_e("Folder Name", "unlimited-elements-for-elementor");
        ?></div>
			
			<input id="uc_dialog_create_folder_name" type="text" class="unite-input-regular" value="">
			
			<?php 
        $prefix = "uc_dialog_create_folder";
        $buttonTitle = esc_html__("Create Folder", "unlimited-elements-for-elementor");
        $loaderTitle = esc_html__("Creating Folder...", "unlimited-elements-for-elementor");
        $successTitle = esc_html__("Folder Created", "unlimited-elements-for-elementor");
        HelperHtmlUC::putDialogActions($prefix, $buttonTitle, $loaderTitle, $successTitle);
        ?>			
			
		</div>
		
		<?php 
    }
    private function putDialogCreateFile()
    {
        ?>
		
		<div id="uc_dialog_create_file" title="<?php 
        esc_html_e("Create File", "unlimited-elements-for-elementor");
        ?>" style="display:none" class="unite-inputs">
			
			<div class="unite-dialog-top"></div>
			<div class="unite-inputs-label"><?php 
        esc_html_e("File Name", "unlimited-elements-for-elementor");
        ?></div>
			
			<input id="uc_dialog_create_file_name" type="text" class="unite-input-regular" value="">
			
			<?php 
        $prefix = "uc_dialog_create_file";
        $buttonTitle = esc_html__("Create File", "unlimited-elements-for-elementor");
        $loaderTitle = esc_html__("Creating File...", "unlimited-elements-for-elementor");
        $successTitle = esc_html__("File Created", "unlimited-elements-for-elementor");
        HelperHtmlUC::putDialogActions($prefix, $buttonTitle, $loaderTitle, $successTitle);
        ?>			
			
		</div>
		
		<?php 
    }
    private function putDialogRenameFile()
    {
        ?>
	
		<div id="uc_dialog_rename_file" title="<?php 
        esc_html_e("Rename File / Folder", "unlimited-elements-for-elementor");
        ?>" style="display:none" class="unite-inputs uc-dialog-rename-file">
			<div class="unite-dialog-top"></div>
			<div class="unite-inputs-label"><?php 
        esc_html_e("Rename this file/folder to", "unlimited-elements-for-elementor");
        ?>:</div>
			<input id="uc_dialog_rename_file_input" type="text" class="unite-input-regular">
	
			<?php 
        $prefix = "uc_dialog_rename_file";
        $buttonTitle = esc_html__("Rename", "unlimited-elements-for-elementor");
        $loaderTitle = esc_html__("Renaming...", "unlimited-elements-for-elementor");
        $successTitle = esc_html__("File/Dir Renamed", "unlimited-elements-for-elementor");
        HelperHtmlUC::putDialogActions($prefix, $buttonTitle, $loaderTitle, $successTitle);
        ?>
	
		</div>
	<?php 
    }
    private function putDialogEditFile()
    {
        ?>
		<div id="uc_dialog_edit_file" title="<?php 
        esc_html_e("Edit File", "unlimited-elements-for-elementor");
        ?>" style="display:none" class="unite-inputs uc-dialog-edit-file">
			
			<div class="uc-dialog-inner">
				<div id="uc_dialog_edit_file_loader" class="uc-loader-wrapper">
					<span class="loader_text"><?php 
        esc_html_e("Loading...", "unlimited-elements-for-elementor");
        ?></span>
				</div>
				
				<textarea id="uc_dialog_edit_file_textarea" style="display:none"></textarea>

				<div id="uc_dialog_edit_file_loadersaving" class="unite-dialog-loader" style="display:none"><?php 
        esc_html_e("Saving File...", "unlimited-elements-for-elementor");
        ?></div>
				<div id="uc_dialog_edit_file_success" class="unite-dialog-success" style="display:none"><?php 
        esc_html_e("File Saved...", "unlimited-elements-for-elementor");
        ?></div>
				<div id="uc_dialog_edit_file_error" class="unite-dialog-error"></div>
				
			</div>
			
		</div>
		<?php 
    }
    private function putDialogMoveFiles()
    {
        $objAssets = new UniteCreatorAssetsWork();
        $objAssets->initByKey("folder_browser", $this->objAddon);
        $objAssets->setOption(UniteCreatorAssets::OPTION_ID, "uc_movefile_browser");
        ?>
		<div id="uc_dialog_move_files" title="<?php 
        esc_html_e("Move Files", "unlimited-elements-for-elementor");
        ?>" style="display:none" class="unite-inputs uc-dialog-move-file">
			
			<div class="unite-dialog-top"></div>
			
			<div id="uc_dialog_move_label" class="unite-inputs-label" data-text="<?php 
        esc_html_e("Move %1 files to", "unlimited-elements-for-elementor");
        ?>">:</div>
			
			<div id="uc_dialog_move_files_url" class="unite-dialog-text-bold mtop_5 mbottom_5"></div>
			
			<div class="uc-browser-wrapper">
			
				<?php 
        $objAssets->putHTML();
        ?>
			
			</div>
			
			<?php 
        $prefix = "uc_dialog_move_files";
        $buttonTitle = esc_html__("Move Files", "unlimited-elements-for-elementor");
        $loaderTitle = esc_html__("Moving Files...", "unlimited-elements-for-elementor");
        $successTitle = esc_html__("Files Moved", "unlimited-elements-for-elementor");
        HelperHtmlUC::putDialogActions($prefix, $buttonTitle, $loaderTitle, $successTitle);
        ?>
			
			<div id="uc_dialog_move_message" class="uc-dialog-move-message" style="display:none">
				
				<div id="uc_dialog_move_message_text" class="uc-dialog-move-message-text"></div>
				
				<div class="vert_top5"></div>
				
				<a href="javascript:void(0)" class="unite-button-secondary" data-action="overwrite"><?php 
        esc_html_e("Overwrite", "unlimited-elements-for-elementor");
        ?></a>
				<a href="javascript:void(0)" class="unite-button-secondary" data-action="skip"><?php 
        esc_html_e("Skip", "unlimited-elements-for-elementor");
        ?></a>
				<a href="javascript:void(0)" class="unite-button-secondary" data-action="cancel"><?php 
        esc_html_e("Cancel", "unlimited-elements-for-elementor");
        ?></a>
				
			</div>
			
		</div>
		<?php 
    }
    private function putActionsDialogs()
    {
        if ($this->flagPutOnce == true) {
            return false;
        }
        $this->putDialogCreateFolder();
        $this->putDialogCreateFile();
        $this->putDialogEditFile();
        $this->putDialogRenameFile();
        $this->putDialogMoveFiles();
    }
    private function putActionsPanel()
    {
        ?>
				<div class="uc-assets-buttons-panel">
					<a class="uc-button-upload-file uc-panel-button unite-button-secondary" data-action="upload" href="javascript:void(0)" ><?php 
        esc_html_e("Upload", "unlimited-elements-for-elementor");
        ?></a>
					<a class="uc-button-select-all uc-panel-button unite-button-secondary button-disabled" data-action="select_all" href="javascript:void(0)"  data-textselect="<?php 
        esc_html_e("Select All", "unlimited-elements-for-elementor");
        ?>" data-textunselect="<?php 
        esc_html_e("Unselect All", "unlimited-elements-for-elementor");
        ?>" ><?php 
        esc_html_e("Select All", "unlimited-elements-for-elementor");
        ?></a>
					<a class="uc-button-create-folder uc-panel-button unite-button-secondary" data-action="create_folder" href="javascript:void(0)"><?php 
        esc_html_e("Create Folder", "unlimited-elements-for-elementor");
        ?></a>
					<a class="uc-button-create-file uc-panel-button unite-button-secondary" data-action="create_file" href="javascript:void(0)"><?php 
        esc_html_e("Create File", "unlimited-elements-for-elementor");
        ?></a>
					
					<a class="uc-panel-button unite-button-secondary button-disabled uc-relate-multiple" data-action="delete" href="javascript:void(0)"><?php 
        esc_html_e("Delete", "unlimited-elements-for-elementor");
        ?></a>
					<span class="uc-preloader-deleting loader_text mleft_5" style="display:none"><?php 
        esc_html_e("deleting...", "unlimited-elements-for-elementor");
        ?></span>
										
					<a class="uc-panel-button unite-button-secondary button-disabled uc-relate-single uc-relate-file" data-action="edit" href="javascript:void(0)"><?php 
        esc_html_e("Edit", "unlimited-elements-for-elementor");
        ?></a>
					
					<a class="uc-panel-button unite-button-secondary button-disabled uc-relate-single" data-action="rename" href="javascript:void(0)"><?php 
        esc_html_e("Rename", "unlimited-elements-for-elementor");
        ?></a>
					
					<a class="uc-panel-button unite-button-secondary uc-relate-multiple button-disabled" data-action="move" href="javascript:void(0)"><?php 
        esc_html_e("Move", "unlimited-elements-for-elementor");
        ?></a>
					
					<a class="uc-panel-button unite-button-secondary button-disabled uc-relate-special uc-relate-type-zip" data-action="unzip" href="javascript:void(0)"><?php 
        esc_html_e("Unzip", "unlimited-elements-for-elementor");
        ?></a>
					<span class="uc-preloader-unzip loader_round mleft_5" style="display:none"><?php 
        esc_html_e("unzipping...", "unlimited-elements-for-elementor");
        ?></span>
					
					<a class="uc-panel-button unite-button-secondary button-disabled uc-relate-single" data-action="view" href="javascript:void(0)"><?php 
        esc_html_e("View", "unlimited-elements-for-elementor");
        ?></a>
					 
				</div>
		<?php 
    }
    private function putActivePathBar($path)
    {
        $activePath = $this->getActivePath($path);
        ?>
				<div class="uc-assets-activepath">
				
					<span class="uc-assets-activepath-inner">
						<?php 
        esc_html_e("Active Path", "unlimited-elements-for-elementor");
        ?>:
						 <span class="uc-pathname">../<?php 
        echo esc_html($activePath);
        ?></span>
					 </span>
					 
					 <span class="uc-preloader-refreshpath loader_round mleft_5" style="display:none"></span>
				</div>
		
		<?php 
    }
    public function putHTML($path = null, $wrapperOnly = false)
    {
        try {
            $this->validateStartPath();
            $activePath = $this->getActivePath($path);
            $activePathData = htmlspecialchars($activePath);
            $startPath = $this->getStartPathRelative();
            $startPathData = htmlspecialchars($startPath);
            $wrapperStyle = $this->getOption(self::OPTION_WRAPPER_STYLE, "");
            if (!empty($wrapperStyle)) {
                $wrapperStyle = "style='{$wrapperStyle}'";
            }
            $id = $this->getOption(self::OPTION_ID, "");
            $id = esc_attr($id);
            if (!empty($id)) {
                $id = "id='{$id}' ";
            }
            $putActivepath = $this->getOption(self::OPTION_PUT_ACTIVEPATH);
            $arrOptionsForClient = $this->getArrOptionsForClient();
            $jsonOptions = json_encode($arrOptionsForClient);
            $jsonOptions = htmlspecialchars($jsonOptions);
        } catch (Exception $e) {
            $message = $e->getMessage();
            $trace = "";
            if (GlobalsUC::SHOW_TRACE == true) {
                $trace = $e->getTraceAsString();
            }
            $htmlError = HelperUC::getHtmlErrorMessage($message, $trace, "Assets Manager Error: ");
            ?>
				<div <?php 
            echo UniteProviderFunctionsUC::escAddParam($id);
            ?> data-pathkey="<?php 
            echo esc_attr($this->pathKey);
            ?>" class="uc-assets-wrapper" <?php 
            echo UniteProviderFunctionsUC::escAddParam($wrapperStyle);
            ?> data-isbrowser="<?php 
            echo esc_attr($this->isBrowerMode);
            ?>" data-path="<?php 
            echo esc_attr($activePathData);
            ?>" data-startpath="<?php 
            echo esc_attr($startPathData);
            ?>" data-options="<?php 
            echo esc_attr($jsonOptions);
            ?>">
				<?php 
            echo "<div class='uc-assets-startup-error'>" . $htmlError . "</div>";
            echo "</div>";
            return false;
        }
        ?>
				<div <?php 
        echo UniteProviderFunctionsUC::escAddParam($id);
        ?>data-pathkey="<?php 
        echo esc_attr($this->pathKey);
        ?>" class="uc-assets-wrapper" <?php 
        echo UniteProviderFunctionsUC::escAddParam($wrapperStyle);
        ?> data-isbrowser="<?php 
        echo esc_attr($this->isBrowerMode);
        ?>" data-path="<?php 
        echo esc_attr($activePathData);
        ?>" data-startpath="<?php 
        echo esc_attr($startPathData);
        ?>" data-options="<?php 
        echo esc_attr($jsonOptions);
        ?>">
					
					<?php 
        try {
            if ($putActivepath === true) {
                $this->putActivePathBar($path);
            }
            ?>
					
					<?php 
            if ($this->isBrowerMode == false) {
                $this->putActionsPanel();
            }
            ?>
									
					<div class="uc-preloader-filelist loader_text mtop_25" style="display:none">
					
						<?php 
            esc_html_e("Loading File list...", "unlimited-elements-for-elementor");
            ?>
					
					</div>
					
					<div class="uc-filelist-error unite-color-red mtop_10"></div>
					
					<?php 
            if ($wrapperOnly == false) {
                echo UniteProviderFunctionsUC::escCombinedHtml($this->getHtmlDir($path, true));
            } else {
                echo UniteProviderFunctionsUC::escCombinedHtml($this->getEmptyHtmlDirList());
            }
            ?>
				
				<?php 
            if ($this->isBrowerMode == false) {
                $this->putUploadFileDialog();
                $this->putActionsDialogs();
            }
            $this->flagPutOnce == true;
        } catch (Exception $e) {
            $message = $e->getMessage();
            $trace = "";
            if (GlobalsUC::SHOW_TRACE == true) {
                $trace = $e->getTraceAsString();
            }
            $htmlError = HelperUC::getHtmlErrorMessage($message, $trace, "Assets Manager Error: ");
            echo "<div class='uc-assets-startup-error'>" . esc_html($htmlError) . "</div>";
        }
        ?>
		
			<div class="unite-clear"></div>
		</div>
		
		<?php 
    }
}