mirror of
https://github.com/icecoder/ICEcoder.git
synced 2026-02-27 13:31:18 +01:00
Upon replaceText being needed, we detect if we have a high enough userLevel and if it's writable, if not provide an appropriate message to the user Otherwise - read, replace and save the new content with the find/replace combo requested Clear the server message and item from the queue
316 lines
14 KiB
PHP
316 lines
14 KiB
PHP
<?php include("settings.php");?>
|
|
<?php
|
|
// Get the save type if any
|
|
if (isset($_GET['saveType'])) {$saveType = strClean($_GET['saveType']);};
|
|
|
|
// Establish the filename/new filename
|
|
$file = str_replace("|","/",strClean(
|
|
isset($_POST['newFileName']) && $_POST['newFileName']!=""
|
|
? $_POST['newFileName']
|
|
: $_GET['file']
|
|
));
|
|
|
|
// Make $file a full path and establish the $fileLoc and $fileName
|
|
if (strpos($file,$docRoot)===false) {$file=str_replace("|","/",$docRoot.$iceRoot.$file);};
|
|
$fileLoc = substr(str_replace($docRoot,"",$file),0,strrpos(str_replace($docRoot,"",$file),"/"));
|
|
$fileName = basename($file);
|
|
|
|
// If we're due to open a file...
|
|
if ($_GET['action']=="load") {
|
|
echo '<script>action="load";</script>';
|
|
|
|
// Determine what to do based on filename
|
|
// Everything is opened as text in the editor unless specified otherwise
|
|
$fileType="text";
|
|
if (strpos($fileName,".jpg")>0||strpos($fileName,".jpeg")>0||strpos($fileName,".gif")>0||strpos($fileName,".png")>0) {$fileType="image";};
|
|
|
|
if ($fileType=="text") {
|
|
$bannedFile=false;
|
|
for ($i=0;$i<count($ICEcoder["restrictedFiles"]);$i++) {
|
|
if (strpos($fileName,$ICEcoder["restrictedFiles"][$i])!="") {
|
|
$bannedFile=true;
|
|
}
|
|
}
|
|
if (file_exists($file) && ($_SESSION['userLevel'] > 0 || ($_SESSION['userLevel'] == 0 && !$bannedFile))) {
|
|
echo '<script>fileType="text";';
|
|
echo 'top.ICEcoder.shortURL = top.ICEcoder.rightClickedFile = top.ICEcoder.thisFileFolderLink = "'.$fileLoc."/".$fileName.'";';
|
|
echo '</script>';
|
|
$loadedFile = file_get_contents($file);
|
|
echo '<textarea name="loadedFile" id="loadedFile">'.str_replace("</textarea>","<ICEcoder:/:textarea>",htmlentities($loadedFile)).'</textarea>';
|
|
} else if (!file_exists($file)) {
|
|
echo '<script>fileType="nothing";</script>';
|
|
echo '<script>top.ICEcoder.message(\'Sorry, '.$fileLoc."/".$fileName.' doesn\\\'t seem to exist on the server\');</script>';
|
|
} else {
|
|
echo '<script>fileType="nothing";</script>';
|
|
echo '<script>top.ICEcoder.message(\'Sorry, you need a higher admin level to view this file\');</script>';
|
|
}
|
|
};
|
|
|
|
if ($fileType=="image") {
|
|
echo '<script>fileType="image";fileName=\''.$fileLoc."/".$fileName.'\'</script>';
|
|
};
|
|
};
|
|
|
|
// If we're due to add a new folder...
|
|
if ($_GET['action']=="newFolder") {
|
|
if (is_writable($docRoot.$fileLoc) && $_SESSION['userLevel'] > 0) {
|
|
mkdir($file, 0705);
|
|
// Reload file manager
|
|
echo '<script>top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'add\',\''.$fileLoc.'\',\''.$fileName.'\');action="newFolder";</script>';
|
|
} else {
|
|
echo "<script>top.ICEcoder.message('";
|
|
if (!is_writable($docRoot.$fileLoc)) {
|
|
echo "Sorry, cannot create folder at\\n".$fileLoc;
|
|
} else {
|
|
echo "Sorry, you need to be logged in to add folders";
|
|
}
|
|
echo "');action='nothing';</script>";
|
|
}
|
|
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
|
|
}
|
|
|
|
// If we're due to rename a file/folder...
|
|
if ($_GET['action']=="rename") {
|
|
if ($_SESSION['userLevel'] > 0 && is_writable($docRoot.$iceRoot.str_replace("|","/",strClean($_GET['oldFileName'])))) {
|
|
rename($docRoot.$iceRoot.str_replace("|","/",strClean($_GET['oldFileName'])),$docRoot.$fileLoc."/".$fileName);
|
|
// Reload file manager
|
|
echo '<script>top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'rename\',\''.$fileLoc.'\',\''.$fileName.'\',\'\',\''.str_replace($iceRoot,"",strClean($_GET['oldFileName'])).'\');';
|
|
echo 'action="rename";</script>';
|
|
} else {
|
|
if (!is_writable($_GET['oldFileName'])) {
|
|
echo "<script>top.ICEcoder.message('Sorry, cannot rename\\n".strClean($_GET['oldFileName'])."');</script>";
|
|
} else {
|
|
echo '<script>top.ICEcoder.message(\'Sorry, you need to be logged in to rename\');</script>';
|
|
}
|
|
echo '<script>action="nothing";</script>';
|
|
}
|
|
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
|
|
}
|
|
|
|
// If we're due to replace text in a file...
|
|
if ($_GET['action']=="replaceText") {
|
|
if ($_SESSION['userLevel'] > 0 && is_writable(str_replace("|","/",strClean($_GET['fileRef'])))) {
|
|
$file = str_replace("|","/",strClean($_GET['fileRef']));
|
|
$loadedFile = file_get_contents($file);
|
|
$newContent = str_replace(strClean($_GET['find']),strClean($_GET['replace']),$loadedFile);
|
|
$fh = fopen($file, 'w') or die("Sorry, cannot save");
|
|
fwrite($fh, $newContent);
|
|
fclose($fh);
|
|
echo '<script>action="replaceText";</script>';
|
|
} else {
|
|
if (!is_writable(str_replace("|","/",strClean($_GET['fileRef'])))) {
|
|
echo "<script>top.ICEcoder.message('Sorry, cannot replace text in\\n".strClean($_GET['fileRef'])."');</script>";
|
|
} else {
|
|
echo '<script>top.ICEcoder.message(\'Sorry, you need to be logged in to rename\');</script>';
|
|
}
|
|
echo '<script>action="nothing";</script>';
|
|
}
|
|
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
|
|
}
|
|
|
|
// If we're due to change permissions on a file/folder...
|
|
if ($_GET['action']=="perms") {
|
|
if ($_SESSION['userLevel'] > 0 && is_writable($file)) {
|
|
chmod($file,octdec(numClean($_GET['perms'])));
|
|
// Reload file manager
|
|
echo '<script>top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'chmod\',\''.$fileLoc.'\',\''.$fileName.'\',\''.numClean($_GET['perms']).'\');';
|
|
echo 'action="perms";</script>';
|
|
} else {
|
|
if (!is_writable($file)) {
|
|
echo "<script>top.ICEcoder.message('Sorry, cannot change permissions on \\n".strClean($file)."');</script>";
|
|
} else {
|
|
echo '<script>top.ICEcoder.message(\'Sorry, you need to be logged in to change permissions\');</script>';
|
|
}
|
|
echo '<script>action="nothing";</script>';
|
|
}
|
|
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
|
|
}
|
|
|
|
// If we're due to delete a file...
|
|
if ($_GET['action']=="delete") {
|
|
if ($_SESSION['userLevel'] > 0) {
|
|
$filesArray = split(";",$file); // May contain more than one file here
|
|
for ($i=0;$i<=count($filesArray)-1;$i++) {
|
|
if (is_writable($iceRoot.$filesArray[$i])) {
|
|
if (is_dir($iceRoot.$filesArray[$i])) {
|
|
rrmdir($iceRoot.$filesArray[$i]);
|
|
} else {
|
|
unlink($iceRoot.$filesArray[$i]);
|
|
}
|
|
// Reload file manager
|
|
echo '<script>top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'delete\',\''.$fileLoc.'\',\''.$fileName.'\');';
|
|
echo 'action="delete";</script>';
|
|
} else {
|
|
echo "<script>top.ICEcoder.message('Sorry can\\'t delete\\n".$filesArray[$i]."');</script>";
|
|
}
|
|
echo '<script>action="nothing";</script>';
|
|
}
|
|
} else {
|
|
if (!is_writable($iceRoot.$filesArray[$i])) {
|
|
echo "<script>top.ICEcoder.message('Sorry, cannot delete\\n".$iceRoot.$filesArray[$i]."');</script>";
|
|
} else {
|
|
echo '<script>top.ICEcoder.message(\'Sorry, you need to be logged in to delete\');</script>';
|
|
}
|
|
echo '<script>action="nothing";</script>';
|
|
}
|
|
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
|
|
}
|
|
|
|
// The function to recursively remove folders & files
|
|
function rrmdir($dir) {
|
|
if (is_dir($dir)) {
|
|
$objects = scandir($dir);
|
|
foreach ($objects as $object) {
|
|
if ($object != "." && $object != "..") {
|
|
if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
|
|
}
|
|
}
|
|
reset($objects);
|
|
rmdir($dir);
|
|
}
|
|
}
|
|
|
|
if ($_GET['action']=="save") {
|
|
echo '<script>action="save";</script>';
|
|
// on the form posting via a reload, save the file
|
|
if (isset($_POST['contents'])) {
|
|
if ($_SESSION['userLevel'] > 0) {
|
|
if ((file_exists($file) && is_writable($file)) || isset($_POST['newFileName']) && $_POST['newFileName']!="") {
|
|
if (filemtime($file)==$_GET['fileMDT']||!(isset($_GET['fileMDT']))) {
|
|
$fh = fopen($file, 'w') or die("Sorry, cannot save");
|
|
fwrite($fh, $_POST['contents']);
|
|
fclose($fh);
|
|
clearstatcache();
|
|
echo '<script>top.ICEcoder.openFileMDTs[top.ICEcoder.selectedTab-1]="'.filemtime($file).'";</script>';
|
|
// Reload file manager & rename tab if it was a new file
|
|
if (isset($_POST['newFileName']) && $_POST['newFileName']!="") {
|
|
echo '<script>top.ICEcoder.selectedFiles=[];top.ICEcoder.updateFileManagerList(\'add\',\''.$fileLoc.'\',\''.$fileName.'\');</script>';
|
|
echo '<script>top.ICEcoder.renameTab(top.ICEcoder.selectedTab,\''.$fileLoc."/".$fileName.'\');</script>';
|
|
}
|
|
// Reload stickytab window
|
|
echo '<script>if (top.ICEcoder.stickyTabWindow.location) {top.ICEcoder.stickyTabWindow.location.reload()};action="doneSave";</script>';
|
|
} else {
|
|
$loadedFile = file_get_contents($file);
|
|
echo '<textarea name="loadedFile" id="loadedFile">'.str_replace("</textarea>","<ICEcoder:/:textarea>",htmlentities($loadedFile)).'</textarea>';
|
|
echo '<textarea name="userVersionFile" id="userVersionFile"></textarea>';
|
|
?>
|
|
<script>
|
|
var refreshFile = top.ICEcoder.ask('Sorry, this file has changed, cannot save\n<?php echo $file;?>\n\nReload this file and copy your version to a new document?');
|
|
if (refreshFile) {
|
|
var cM = top.ICEcoder.getcMInstance();
|
|
var thisTab = top.ICEcoder.selectedTab;
|
|
document.getElementById('userVersionFile').value = cM.getValue();
|
|
// Revert back to original
|
|
cM.setValue(document.getElementById('loadedFile').value);
|
|
top.ICEcoder.changedContent[thisTab-1] = 0;
|
|
top.ICEcoder.openFileMDTs[top.ICEcoder.selectedTab-1] = "<?php echo filemtime($file); ?>";
|
|
cM.clearHistory();
|
|
// Now for the new file
|
|
top.ICEcoder.newTab();
|
|
cM = top.ICEcoder.getcMInstance();
|
|
cM.setValue(document.getElementById('userVersionFile').value);
|
|
cM.clearHistory();
|
|
// Finally, switch back to original tab
|
|
top.ICEcoder.switchTab(thisTab);
|
|
}
|
|
</script>
|
|
<?php
|
|
echo "<script>action='nothing';</script>";
|
|
}
|
|
} else {
|
|
echo "<script>top.ICEcoder.message('Sorry, cannot write\\n".$file."');action='nothing';</script>";
|
|
}
|
|
} else {
|
|
echo "<script>top.ICEcoder.message('Sorry, you need to be logged in to save');action='nothing';</script>";
|
|
}
|
|
echo '<script>top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);</script>';
|
|
}
|
|
};
|
|
?>
|
|
<script>
|
|
if (action=="load") {
|
|
if (fileType=="text") {
|
|
setTimeout(function() {
|
|
if (!top.ICEcoder.content.contentWindow.createNewCMInstance) {
|
|
console.log('There was tech hiccup, likely something wasn\'t quite ready. So ICEcoder reloaded it\'s file control again.');
|
|
window.location.reload();
|
|
} else {
|
|
top.ICEcoder.loadingFile = true;
|
|
// Reset the various states back to their initial setting
|
|
selectedTab = top.ICEcoder.openFiles.length; // The tab that's currently selected
|
|
|
|
// Finally, store all data, show tabs etc
|
|
top.ICEcoder.createNewTab();
|
|
top.ICEcoder.cMInstances.push(top.ICEcoder.nextcMInstance);
|
|
top.ICEcoder.setLayout();
|
|
top.ICEcoder.content.contentWindow.createNewCMInstance(top.ICEcoder.nextcMInstance);
|
|
|
|
// Set the value & innerHTML of the code textarea to that of our loaded file plus make it visible (it's hidden on _coder's load)
|
|
top.ICEcoder.switchMode();
|
|
cM = top.ICEcoder.getcMInstance();
|
|
cM.setValue(document.getElementById('loadedFile').value);
|
|
top.document.getElementById('content').style.visibility='visible';
|
|
top.ICEcoder.switchTab(top.ICEcoder.selectedTab);
|
|
cM.focus();
|
|
|
|
// Then clean it up, set the text cursor, update the display and get the character data
|
|
top.ICEcoder.contentCleanUp();
|
|
top.ICEcoder.content.contentWindow['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setLineClass(top.ICEcoder['cMActiveLine'+top.ICEcoder.selectedTab], null);
|
|
top.ICEcoder['cMActiveLine'+top.ICEcoder.selectedTab] = top.ICEcoder.content.contentWindow['cM'+top.ICEcoder.cMInstances[top.ICEcoder.selectedTab-1]].setLineClass(0, "cm-s-activeLine");
|
|
top.ICEcoder.nextcMInstance++;
|
|
top.ICEcoder.openFileMDTs.push('<?php echo filemtime($file); ?>');
|
|
top.ICEcoder.loadingFile = false;
|
|
}
|
|
},4);
|
|
}
|
|
|
|
if (fileType=="image") {
|
|
top.document.getElementById('blackMask').style.visibility = "visible";
|
|
top.document.getElementById('mediaContainer').innerHTML = "<img src=\"<?php echo $fileLoc."/".$fileName;?>\" class=\"whiteGlow\" style=\"border: solid 10px #fff; max-width: 700px; max-height: 500px\" onClick=\"return false\"><br><span class=\"whiteGlow\" style=\"border: solid 10px #fff; color: #000; background-color: #fff\" onClick=\"return false\"><?php echo $fileLoc."/".$fileName;?></span>";
|
|
}
|
|
|
|
top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);
|
|
}
|
|
</script>
|
|
|
|
<form name="saveFile" action="file-control.php?action=save&file=<?php if (isset($file)) {echo $file;}; if (isset($_GET['fileMDT']) && $_GET['fileMDT']!="undefined") {echo "&fileMDT=".numClean($_GET['fileMDT']);};?>" method="POST">
|
|
<textarea name="contents"></textarea>
|
|
<input type="hidden" name="newFileName" value="">
|
|
</form>
|
|
|
|
<script>
|
|
if (action=="save") {
|
|
<?php
|
|
if (strpos($file,"[NEW]")>0||$saveType=="saveAs") {
|
|
if (strpos($fileName,"[NEW]")>0) {echo "fileLoc = '".$fileLoc."';";} else {echo "fileLoc = '';";};
|
|
?>
|
|
newFileName = top.ICEcoder.getInput(fileLoc != ""
|
|
? 'Enter filename to save at '+fileLoc
|
|
: 'Enter filename (including path, prefixed with /)'
|
|
,'');
|
|
if (newFileName.substr(0,1)!="/") {newFileName = "/" + newFileName}
|
|
if (newFileName) {
|
|
newFileName = fileLoc == "" ? newFileName : fileLoc + "/" + fileName;
|
|
}
|
|
if (newFileName && top.document.getElementById('filesFrame').contentWindow.document.getElementById(newFileName.replace(/\//g,"|"))) {
|
|
overwriteOK = top.ICEcoder.ask('That file exists already, overwrite?');
|
|
}
|
|
document.saveFile.newFileName.value = '<?php echo $docRoot; ?>' + newFileName;
|
|
<?php ;};?>
|
|
if ("undefined" == typeof newFileName || (newFileName && "undefined" == typeof overwriteOK) || ("undefined" != typeof overwriteOK && overwriteOK)) {
|
|
top.ICEcoder.serverMessage('<b>Saving</b><br>'+ <?php echo strpos($file,"[NEW]")>0 ? "newFileName" : "'$file'"; ?>);
|
|
document.saveFile.contents.value = top.document.getElementById('saveTemp1').value;
|
|
document.saveFile.submit();
|
|
} else {
|
|
top.ICEcoder.serverMessage();top.ICEcoder.serverQueue("del",0);
|
|
action=="nothing";
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<script>
|
|
if (action=="doneSave") {
|
|
top.ICEcoder.changedContent[top.ICEcoder.selectedTab-1] = 0;
|
|
top.ICEcoder.redoTabHighlight(top.ICEcoder.selectedTab);
|
|
}
|
|
</script>
|