check(); if ("load" === $_GET['action'] && true === $error) { die("parent.parent.ICEcoder.message('" . $errorMsg . "');parent.parent.ICEcoder.serverMessage();parent.parent.ICEcoder.serverQueue(\"del\");"); } } $doNext = ""; // ============= // LOADING FILES // ============= // If we're due to open a file... if (!$error && "load" === $_GET['action']) { echo ' $docRoot, "fileLoc" => $fileLoc, "fileURL" => $fileURL, "fileName" => $fileName, "fileMDTURLPart" => $fileMDTURLPart, "fileVersionURLPart" => $fileVersionURLPart ]; $doNext .= $fileClass->handleSaveLooparound($fileDetails, $finalAction, $t); // =================== // FILE CONTENT SAVING // =================== } elseif (isset($_POST['changes']) || isset($_POST['contents'])) { $finalAction = isset($_POST["newFileName"]) ? "save as" : "save"; // ================= // FILE IS WRITEABLE // ================= if (!$demoMode && ((file_exists($file) && is_writable($file)) || isset($_POST['newFileName']) && "" != $_POST['newFileName'])) { $filemtime = "Windows" !== $serverType && file_exists($file) ? filemtime($file) : "1000000"; // ================================================== // MDT'S MATCH (OR WE'RE SAVING NEW FILE), WRITE FILE // ================================================== if (!(isset($_GET['fileMDT'])) || $filemtime == $_GET['fileMDT'] || isset($_POST['newFileName'])) { // Write file $fileClass->writeFile(); // Save a version controlled backup source of the file if ($ICEcoder["backupsKept"]) { $backupClass->makeBackup($fileLoc, $fileName, $contents); } $doNext .= $fileClass->updateUI(); $doNext .= $fileClass->handleMarkdown(); $doNext .= $fileClass->handleDiffPane(); $doNext .= $fileClass->finaliseSave(); $doNext .= $fileClass->compileSass(); $doNext .= $fileClass->compileLess(); // Run any extra processes $extraProcessesClass = new ExtraProcesses($fileLoc, $fileName); $doNext = $extraProcessesClass->onFileSave($doNext); // ====================================================== // MDT'S DON'T MATCH, OFFER TO LOAD FILE & SHOW DIFF VIEW // ====================================================== } else { $fileClass->loadAndShowDiff(); } // =================== // FILE IS UNWRITEABLE // =================== } else { $finalAction = "nothing"; $doNext .= "ICEcoder.message('" . $t['Sorry, cannot save'] . "\\\\n" . $file . "');"; } $doNext .= 'ICEcoder.serverMessage(); ICEcoder.serverQueue("del");'; } }; // ========== // NEW FOLDER // ========== if (!$error && "newFolder" === $_GET['action']) { if (!$demoMode && is_writable($docRoot . $fileLoc)) { mkdir($file, octdec((string) $ICEcoder['newDirPerms'])); $fileClass->updateFileManager('add', $fileLoc, $fileName, '', '', '', 'folder'); $finalAction = "newFolder"; // Run any extra processes $extraProcessesClass = new ExtraProcesses($fileLoc, $fileName); $doNext = $extraProcessesClass->onDirNew($doNext); } else { $doNext .= "ICEcoder.message('" . $t['Sorry, cannot create...'] . "\\\\n" . $fileLoc . "');"; $finalAction = "nothing"; } $doNext .= 'ICEcoder.serverMessage(); ICEcoder.serverQueue("del");'; }; // ================ // MOVE FILE/FOLDER // ================ if (!$error && "move" === $_GET['action']) { $srcDir = $docRoot . $iceRoot . str_replace("|", "/", $_GET['oldFileName']); $tgtDir = $docRoot . $fileLoc . "/" . $fileName; if ($srcDir != $tgtDir) { if (!$demoMode && is_writable($srcDir)) { if(rename($srcDir, $tgtDir)) { // Is a dir or file (needed to create new item in file manager) $fileOrFolder = is_dir($docRoot . $fileLoc . "/" . $fileName) ? "folder" : "file"; $fileClass->updateFileManager('move', $fileLoc, $fileName, '', str_replace($iceRoot, "", str_replace("|", "/", $_GET['oldFileName'])), '', $fileOrFolder); $doNext .= 'tabNum = ICEcoder.openFiles.indexOf(\'' . str_replace("|", "/", $_GET['oldFileName']) . '\') + 1; if (0 < tabNum) {ICEcoder.renameTab(tabNum, \'' . $fileLoc . "/" . $fileName . '\');};'; $finalAction = "move"; // Run any extra processes $extraProcessesClass = new ExtraProcesses($fileLoc, $fileName); $doNext = $extraProcessesClass->onFileDirMove($doNext); } else { $doNext .= "ICEcoder.message('" . $t['Sorry, cannot move'] . "\\\\n" . str_replace("|", "/", $_GET['oldFileName']) . "\\\\n\\\\n" . $t['Maybe public write...'] . "');"; $finalAction = "nothing"; } } else { $doNext .= "ICEcoder.message('" . $t['Sorry, cannot move'] . "\\\\n" . str_replace("|", "/", $_GET['oldFileName']) . "\\\\n\\\\n" . $t['Maybe public write...'] . "');"; $finalAction = "nothing"; } } else { $doNext .= ""; $finalAction = "nothing"; } $doNext .= 'ICEcoder.serverMessage(); ICEcoder.serverQueue("del");'; }; // ================== // RENAME FILE/FOLDER // ================== if (!$error && "rename" === $_GET['action']) { if (!$demoMode && is_writable($docRoot . $iceRoot . str_replace("|", "/", $_GET['oldFileName']))) { if (true === file_exists($docRoot . $fileLoc)) { rename($docRoot.$iceRoot.str_replace("|", "/", $_GET['oldFileName']), $docRoot . $fileLoc . "/" . $fileName); $fileClass->updateFileManager('rename', $fileLoc, $fileName, '', str_replace($iceRoot, "", $_GET['oldFileName']), '', ''); $doNext .= 'tabNum = ICEcoder.openFiles.indexOf(\'' . str_replace("|", "/", $_GET['oldFileName']) . '\') + 1; if (0 < tabNum) {ICEcoder.renameTab(tabNum, \'' . $fileLoc . "/" . $fileName . '\');};'; $finalAction = "rename"; // Run any extra processes $extraProcessesClass = new ExtraProcesses($fileLoc, $fileName); $doNext = $extraProcessesClass->onFileDirRename($doNext); } else { $doNext .= "ICEcoder.message('".$t['Sorry, cannot rename'] . "\\\\n" . str_replace("|", "/", $_GET['oldFileName']) . "\\\\n\\\\n" . $t['does not seem...'] . "');"; $finalAction = "nothing"; } } else { $doNext .= "ICEcoder.message('".$t['Sorry, cannot rename'] . "\\\\n" . str_replace("|", "/", $_GET['oldFileName']) . "\\\\n\\\\n" . $t['Maybe public write...'] . "');"; $finalAction = "nothing"; } $doNext .= 'ICEcoder.serverMessage(); ICEcoder.serverQueue("del");'; }; // ================= // PASTE FILE/FOLDER // ================= if (!$error && "paste" === $_GET['action']) { $source = $file; $dest = str_replace("//", "/", $docRoot . $iceRoot . str_replace("|", "/", $_GET['location']) . "/" . basename($source)); if (!$demoMode && is_writable(dirname($dest))) { $fileOrFolder = $fileClass->paste(); // Reload file manager $doNext .= 'ICEcoder.updateFileManagerList(\'add\', \'' . str_replace("|", "/", $_GET['location']) . '\', \'' . basename($dest) . '\', false, false, false, \'' . $fileOrFolder . '\');'; $finalAction = "pasteFile"; // Run any extra processes $extraProcessesClass = new ExtraProcesses($fileLoc, $fileName); $doNext = $extraProcessesClass->onFileDirPaste($doNext, $dest); } else { $doNext .= "ICEcoder.message('" . $t['Sorry, cannot copy'] . " \\\\n" . str_replace($docRoot, "", $source) . "\\\\n " . $t['into'] . " \\\\n" . str_replace($docRoot, "", $dest) . "');"; $finalAction = "nothing"; } $doNext .= 'ICEcoder.serverMessage(); ICEcoder.serverQueue("del");'; }; // ============== // UPLOAD FILE(S) // ============== if (!$error && "upload" === $_GET['action']) { if (!$demoMode) { if ($_FILES['filesInput']){ $uploads = $fileClass->getUploadedDetails($_FILES['filesInput']); $finalAction = $fileClass->upload($uploads); } // Run any extra processes $extraProcessesClass = new ExtraProcesses($fileLoc, $fileName); $doNext = $extraProcessesClass->onFileUpload($doNext, $uploads); } else { $doNext .= "parent.parent.ICEcoder.message('" . $t['Sorry, cannot upload...'] . "');"; $finalAction = "nothing"; } $doNext .= "parent.parent.ICEcoder.hideFileMenu(); parent.parent.document.getElementById('fileInput').value = ''; parent.parent.ICEcoder.showHide('hide', parent.parent.document.getElementById('loadingMask'));"; // Upload is not handled by XHR methods, but form post, so we need to manually trigger $doNext in a script tag echo ""; }; // ======================== // DELETE FILE(S)/FOLDER(S) // ======================== if (!$error && "delete" === $_GET['action']) { $filesArray = explode(";", $file); // May contain more than one file here $fileClass->delete(); $doNext .= 'ICEcoder.serverMessage(); ICEcoder.serverQueue("del");'; }; // ====================== // REPLACE TEXT IN A FILE // ====================== if (!$error && "replaceText" === $_GET['action']) { if (!$demoMode && is_writable($file)) { $loadedFile = toUTF8noBOM(getData($file), true); $find = $_GET['find']; $newContent = preg_replace("/($find)/i", $_GET['replace'], $loadedFile); $fh = fopen($file, 'w') or die($t['Sorry, cannot save']); fwrite($fh, $newContent); fclose($fh); $finalAction = "replaceText"; // Run any extra processes $extraProcessesClass = new ExtraProcesses($fileLoc, $fileName); $doNext = $extraProcessesClass->onFileReplaceText($doNext, $_GET['fileRef']); } else { $doNext .= "ICEcoder.message('" . $t['Sorry, cannot replace...'] . "\\\\n" . $file . "');"; $finalAction = "nothing"; } $doNext .= 'ICEcoder.serverMessage(); ICEcoder.serverQueue("del");'; }; // ========================== // GET CONTENTS OF REMOTE URL // ========================== if (!$error && "getRemoteFile" === $_GET['action']) { $lineNumber = max(isset($_REQUEST['lineNumber']) ? intval($_REQUEST['lineNumber']) : 1, 1); if ($remoteFile = toUTF8noBOM(getData($file, 'curl'), true)) { // Get URL contents $urlClass = new URL($remoteFile); $doNext .= $urlClass->load($ICEcoder["lineEnding"], $lineNumber); $finalAction = "getRemoteFile"; // Run any extra processes $extraProcessesClass = new ExtraProcesses($fileLoc); $doNext = $extraProcessesClass->onGetRemoteFile($doNext); } else { $finalAction = "nothing"; $doNext .= 'ICEcoder.message(\'' . $t['Sorry, could not...'] . ' '.$file . '\');'; } $doNext .= 'ICEcoder.serverMessage(); ICEcoder.serverQueue("del");'; }; // ======================= // CHANGING FILE/DIR PERMS // ======================= if (!$error && "perms" === $_GET['action']) { if (!$demoMode && is_writable($file)) { chmod($file, octdec((string) numClean($_GET['perms']))); $fileClass->updateFileManager('chmod', $fileLoc, $fileName, numClean($_GET['perms']), '', '', ''); $finalAction = "perms"; // Run any custom processes $extraProcessesClass = new ExtraProcesses($fileLoc, $fileName); $doNext = $extraProcessesClass->onFileDirPerms($doNext, $_GET['perms']); } else { $finalAction = "nothing"; $doNext .= "ICEcoder.message('" . $t['Sorry, cannot change...'] . " \\\\n" . $file . "');"; } $doNext .= 'ICEcoder.serverMessage(); ICEcoder.serverQueue("del");'; }; // ==================== // CHECK FOR A FILE/DIR // ==================== if (!$error && "checkExists" === $_GET['action']) { // This action is called under seperate AJAX call and the responseText object stored in ICEcoder.lastFileDirCheckStatusObj // Nothing really done here though, we do something with the responseText $finalAction = "checkExists"; $doNext .= 'ICEcoder.serverMessage(); ICEcoder.serverQueue("del");'; }; // =================== // JSON DATA TO RETURN // =================== // No $filemtime yet? Get it now! if (false === isset($filemtime) && !is_dir($file)) { $filemtime = "Windows" !== $serverType && file_exists($file) ? filemtime($file) : 1000000; } if (false === isset($filemtime)) { $filemtime = 1000000; } // Set $timeStart, use 0 if not available $timeStart = isset($_POST["timeStart"]) ? numClean($_POST["timeStart"]) : 0; if ($timeStart == "") { $timeStart = 0; } echo $fileClass->returnJSON(); // Set timestamp of last index to 0 to force a re-index next time we index requireReIndexNextTime();