public function preProcessMove($actionName, &$httpVars, &$fileVars) { $destO = AJXP_Utils::decodeSecureMagic($httpVars["dest"]); $dest = substr($destO, 1, strpos(ltrim($destO, "/"), "/")); if (empty($dest)) { $dest = ltrim($destO, "/"); } $userSelection = new UserSelection(); $userSelection->initFromHttpVars($httpVars); if (!$userSelection->isEmpty()) { $testFileO = $userSelection->getUniqueFile(); $testFile = substr($testFileO, 1, strpos(ltrim($testFileO, "/"), "/")); if (empty($testFile)) { $testFile = ltrim($testFileO, "/"); } if ($actionName == "move") { if (strstr($dest, "ENCFS_CLEAR_") != false && strstr($testFile, "ENCFS_CLEAR_") === false || strstr($dest, "ENCFS_CLEAR_") === false && strstr($testFile, "ENCFS_CLEAR_") !== false || strstr($dest, "ENCFS_CLEAR_") != false && strstr($testFile, "ENCFS_CLEAR_") !== false && $testFile != $dest) { $httpVars["force_copy_delete"] = "true"; $this->logDebug("One mount to another, copy/delete instead of move ({$dest}, {$testFile})"); } } else { if ($actionName == "delete" && RecycleBinManager::recycleEnabled()) { if (strstr($testFile, "ENCFS_CLEAR_") !== false) { $httpVars["force_copy_delete"] = "true"; $this->logDebug("One mount to another, copy/delete instead of move"); } } else { if ($actionName == "restore") { if (strstr(RecycleBinManager::getFileOrigin($testFile), "ENCFS_CLEAR_")) { $httpVars["force_copy_delete"] = "true"; $this->logDebug("One mount to another, copy/delete instead of move"); } } } } } }
function copyOrMoveFile($destDir, $srcFile, &$error, &$success, $move = false) { $mess = ConfService::getMessages(); $destFile = $this->repository->getOption("PATH") . $destDir . "/" . basename($srcFile); $realSrcFile = $this->repository->getOption("PATH") . "{$srcFile}"; $recycle = $this->repository->getOption("RECYCLE_BIN"); if (!file_exists($realSrcFile)) { $error[] = $mess[100] . $srcFile; return; } if (dirname($realSrcFile) == dirname($destFile)) { if ($move) { $error[] = $mess[101]; return; } else { $base = basename($srcFile); $i = 1; if (is_file($realSrcFile)) { $dotPos = strrpos($base, "."); if ($dotPos > -1) { $radic = substr($base, 0, $dotPos); $ext = substr($base, $dotPos); } } // auto rename file $i = 1; $newName = $base; while (file_exists($this->repository->getOption("PATH") . $destDir . "/" . $newName)) { $suffix = "-{$i}"; if (isset($radic)) { $newName = $radic . $suffix . $ext; } else { $newName = $base . $suffix; } $i++; } $destFile = $this->repository->getOption("PATH") . $destDir . "/" . $newName; } } if (is_dir($realSrcFile)) { $errors = array(); $succFiles = array(); if ($move) { if (is_file($destFile)) { unlink($destFile); } $res = rename($realSrcFile, $destFile); } else { $dirRes = $this->dircopy($realSrcFile, $destFile, $errors, $succFiles); } if (count($errors) || isset($res) && $res !== true) { $error[] = $mess[114]; return; } } else { if ($move) { if (is_file($destFile)) { unlink($destFile); } $res = rename($realSrcFile, $destFile); } else { $res = copy($realSrcFile, $destFile); } if ($res != 1) { $error[] = $mess[114]; return; } } if ($move) { // Now delete original // $this->deldir($realSrcFile); // both file and dir $messagePart = $mess[74] . " " . SystemTextEncoding::toUTF8($destDir); if (RecycleBinManager::recycleEnabled() && $destDir == "/" . $recycle) { RecycleBinManager::fileToRecycle($srcFile); $messagePart = $mess[123] . " " . $mess[122]; } if (isset($dirRes)) { $success[] = $mess[117] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $messagePart . " (" . SystemTextEncoding::toUTF8($dirRes) . " " . $mess[116] . ") "; } else { $success[] = $mess[34] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $messagePart; } } else { if (RecycleBinManager::recycleEnabled() && $destDir == "/" . $this->repository->getOption("RECYCLE_BIN")) { RecycleBinManager::fileToRecycle($srcFile); } if (isset($dirRes)) { $success[] = $mess[117] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $mess[73] . " " . SystemTextEncoding::toUTF8($destDir) . " (" . SystemTextEncoding::toUTF8($dirRes) . " " . $mess[116] . ")"; } else { $success[] = $mess[34] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $mess[73] . " " . SystemTextEncoding::toUTF8($destDir); } } }
/** * We have to override the standard copyOrMoveFile, as feof() does * not seem to work with ssh2.ftp stream... * Maybe something to search hear http://www.mail-archive.com/php-general@lists.php.net/msg169992.html? * * @param string $destDir * @param string $srcFile * @param array $error * @param array $success * @param boolean $move */ function copyOrMoveFile($destDir, $srcFile, &$error, &$success, $move = false) { $mess = ConfService::getMessages(); $destFile = $this->urlBase . $destDir . "/" . basename($srcFile); $realSrcFile = $this->urlBase . $srcFile; if (!file_exists($realSrcFile)) { $error[] = $mess[100] . $srcFile; return; } if (dirname($realSrcFile) == dirname($destFile)) { if ($move) { $error[] = $mess[101]; return; } else { $base = basename($srcFile); $i = 1; if (is_file($realSrcFile)) { $dotPos = strrpos($base, "."); if ($dotPos > -1) { $radic = substr($base, 0, $dotPos); $ext = substr($base, $dotPos); } } // auto rename file $i = 1; $newName = $base; while (file_exists($this->urlBase . $destDir . "/" . $newName)) { $suffix = "-{$i}"; if (isset($radic)) { $newName = $radic . $suffix . $ext; } else { $newName = $base . $suffix; } $i++; } $destFile = $this->urlBase . $destDir . "/" . $newName; } } if (!is_file($realSrcFile)) { $errors = array(); $succFiles = array(); if ($move) { if (file_exists($destFile)) { $this->deldir($destFile); } $res = rename($realSrcFile, $destFile); } else { $dirRes = $this->dircopy($realSrcFile, $destFile, $errors, $succFiles); } if (count($errors) || isset($res) && $res !== true) { $error[] = $mess[114]; return; } } else { if ($move) { if (file_exists($destFile)) { unlink($destFile); } $res = rename($realSrcFile, $destFile); AJXP_Controller::applyHook("move.metadata", array($realSrcFile, $destFile, false)); } else { try { // BEGIN OVERRIDING list($connection, $remote_base_path) = sftpAccessWrapper::getSshConnection($realSrcFile); $remoteSrc = $remote_base_path . $srcFile; $remoteDest = $remote_base_path . $destDir; AJXP_Logger::debug("SSH2 CP", array("cmd" => 'cp ' . $remoteSrc . ' ' . $remoteDest)); ssh2_exec($connection, 'cp ' . $remoteSrc . ' ' . $remoteDest); AJXP_Controller::applyHook("move.metadata", array($realSrcFile, $destFile, true)); // END OVERRIDING } catch (Exception $e) { $error[] = $e->getMessage(); return; } } } if ($move) { // Now delete original // $this->deldir($realSrcFile); // both file and dir $messagePart = $mess[74] . " " . SystemTextEncoding::toUTF8($destDir); if (RecycleBinManager::recycleEnabled() && $destDir == RecycleBinManager::getRelativeRecycle()) { RecycleBinManager::fileToRecycle($srcFile); $messagePart = $mess[123] . " " . $mess[122]; } if (isset($dirRes)) { $success[] = $mess[117] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $messagePart . " (" . SystemTextEncoding::toUTF8($dirRes) . " " . $mess[116] . ") "; } else { $success[] = $mess[34] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $messagePart; } } else { if (RecycleBinManager::recycleEnabled() && $destDir == "/" . $this->repository->getOption("RECYCLE_BIN")) { RecycleBinManager::fileToRecycle($srcFile); } if (isset($dirRes)) { $success[] = $mess[117] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $mess[73] . " " . SystemTextEncoding::toUTF8($destDir) . " (" . SystemTextEncoding::toUTF8($dirRes) . " " . $mess[116] . ")"; } else { $success[] = $mess[34] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $mess[73] . " " . SystemTextEncoding::toUTF8($destDir); } } }
function switchAction($action, $httpVars, $fileVars) { if (!isset($this->actions[$action])) { return; } $xmlBuffer = ""; foreach ($httpVars as $getName => $getValue) { ${$getName} = AJXP_Utils::securePath(SystemTextEncoding::magicDequote($getValue)); } $selection = new UserSelection(); $selection->initFromHttpVars($httpVars); if (isset($dir) && $action != "upload") { $safeDir = $dir; $dir = SystemTextEncoding::fromUTF8($dir); } if (isset($dest)) { $dest = SystemTextEncoding::fromUTF8($dest); } $mess = ConfService::getMessages(); $recycleBinOption = $this->repository->getOption("RECYCLE_BIN"); // FILTER ACTION FOR DELETE if ($recycleBinOption != "" && $action == "delete" && $dir != "/" . $recycleBinOption) { $action = "move"; $dest = "/" . $recycleBinOption; $dest_node = "AJAXPLORER_RECYCLE_NODE"; } // FILTER ACTION FOR RESTORE if ($recycleBinOption != "" && $action == "restore" && $dir == "/" . $recycleBinOption) { $originalRep = RecycleBinManager::getFileOrigin($selection->getUniqueFile()); if ($originalRep != "") { $action = "move"; $dest = $originalRep; } } switch ($action) { //------------------------------------ // DOWNLOAD, IMAGE & MP3 PROXYS //------------------------------------ case "download": AJXP_Logger::logAction("Download", array("files" => $selection)); $zip = false; if ($selection->isUnique()) { if (is_dir($this->getPath() . "/" . $selection->getUniqueFile())) { $zip = true; $dir .= "/" . basename($selection->getUniqueFile()); } } else { $zip = true; } if ($zip) { // Make a temp zip and send it as download $this->downFile($this->makeName($selection->getFiles()), "force-download", "archive.zip"); } else { $this->downFile($this->makeName($selection->getUniqueFile()), "force-download", $selection->getUniqueFile()); } exit(0); break; case "image_proxy": $this->downFile($this->makeName($file), "image", $file); exit(0); break; case "mp3_proxy": $this->downFile($this->makeName($file), "mp3", $file); exit(0); break; //------------------------------------ // ONLINE EDIT //------------------------------------ //------------------------------------ // ONLINE EDIT //------------------------------------ case "put_content": AJXP_Logger::logAction("Online Edition", array("file" => SystemTextEncoding::fromUTF8($file))); $code = stripslashes($code); $code = str_replace("<", "<", $content); $this->SSHOperation->setRemoteContent($this->makeName($file), $code); echo $mess[115]; exit(0); break; case "get_content": $this->sendFile($this->SSHOperation->getRemoteContent($this->makeName($file)), "plain", $file); exit(0); break; //------------------------------------ // COPY / MOVE //------------------------------------ //------------------------------------ // COPY / MOVE //------------------------------------ case "copy": case "move": if ($selection->isEmpty()) { $errorMessage = $mess[113]; break; } $result = ""; if ($action == "move") { $result = $this->SSHOperation->moveFile($this->makeName($selection->getFiles()), $this->makeName($dest)); } else { $result = $this->SSHOperation->copyFile($this->makeName($selection->getFiles()), $this->makeName($dest)); } $mess = ConfService::getMessages(); if (strlen($result)) { $errorMessage = $mess[114]; } else { foreach ($selection->getFiles() as $files) { $logMessage .= $mess[34] . " " . SystemTextEncoding::toUTF8(basename($file)) . " " . $mess[$action == "move" ? 74 : 73] . " " . SystemTextEncoding::toUTF8($dest) . "\n"; } AJXP_Logger::logAction($action == "move" ? "Move" : "Copy", array("files" => $selection, "destination" => $dest)); } $reloadContextNode = true; $reloadDataNode = SystemTextEncoding::fromUTF8($dest); break; //------------------------------------ // CHANGE FILE PERMISSION //------------------------------------ //------------------------------------ // CHANGE FILE PERMISSION //------------------------------------ case "chmod": $messtmp = ""; $changedFiles = array(); $value = "0" . decoct(octdec(ltrim($chmod_value, "0"))); // On error, the command will fail $result = $this->SSHOperation->chmodFile($this->makeName($selection->getFiles()), $chmod_value); $mess = ConfService::getMessages(); if (strlen($result)) { $errorMessage = $mess[114]; } else { $logMessage = "Successfully changed permission to " . $chmod_value . " for " . count($selection->getFiles()) . " files or folders"; AJXP_Logger::logAction("Chmod", array("dir" => $dir, "filesCount" => count($selection->getFiles()))); $reloadContextNode = true; } break; //------------------------------------ // SUPPRIMER / DELETE //------------------------------------ //------------------------------------ // SUPPRIMER / DELETE //------------------------------------ case "delete": if ($selection->isEmpty()) { $errorMessage = $mess[113]; break; } $logMessages = array(); $result = $this->SSHOperation->deleteFile($this->makeName($selection->getFiles())); if (strlen($result)) { $mess = ConfService::getMessages(); $errorMessage = $mess[120]; } else { $mess = ConfService::getMessages(); foreach ($selection->getFiles() as $file) { $logMessages[] = "{$mess['34']} " . SystemTextEncoding::toUTF8($file) . " {$mess['44']}."; } $logMessage = join("\n", $logMessages); } AJXP_Logger::logAction("Delete", array("files" => $selection)); $reloadContextNode = true; break; //------------------------------------ // RENOMMER / RENAME //------------------------------------ //------------------------------------ // RENOMMER / RENAME //------------------------------------ case "rename": $filename_new = $dir . "/" . $filename_new; $error = $this->SSHOperation->moveFile($this->makeName($file), $this->makeName($filename_new)); if ($error != null) { $errorMessage = $error; break; } $logMessage = SystemTextEncoding::toUTF8($file) . " {$mess['41']} " . SystemTextEncoding::toUTF8($filename_new); $reloadContextNode = true; $pendingSelection = SystemTextEncoding::fromUTF8($filename_new); AJXP_Logger::logAction("Rename", array("original" => $file, "new" => $filename_new)); break; //------------------------------------ // CREER UN REPERTOIRE / CREATE DIR //------------------------------------ //------------------------------------ // CREER UN REPERTOIRE / CREATE DIR //------------------------------------ case "mkdir": $messtmp = ""; $dirname = AJXP_Utils::processFileName($dirname); $error = $this->SSHOperation->createRemoteDirectory($this->makeName($dir . "/" . $dirname)); if (isset($error)) { $errorMessage = $error; break; } $pendingSelection = $dir . "/" . $dirname; $messtmp .= "{$mess['38']} " . SystemTextEncoding::toUTF8($dirname) . " {$mess['39']} "; if ($dir == "") { $messtmp .= "/"; } else { $messtmp .= SystemTextEncoding::toUTF8($dir); } $logMessage = $messtmp; $reloadContextNode = true; AJXP_Logger::logAction("Create Dir", array("dir" => $dir . "/" . $dirname)); break; //------------------------------------ // CREER UN FICHIER / CREATE FILE //------------------------------------ //------------------------------------ // CREER UN FICHIER / CREATE FILE //------------------------------------ case "mkfile": $messtmp = ""; $filename = AJXP_Utils::processFileName($filename); $error = $this->SSHOperation->setRemoteContent($this->makeName($dir . "/" . $filename), ""); if (isset($error)) { $errorMessage = $error; break; } $messtmp .= "{$mess['34']} " . SystemTextEncoding::toUTF8($filename) . " {$mess['39']} "; if ($dir == "") { $messtmp .= "/"; } else { $messtmp .= SystemTextEncoding::toUTF8($dir); } $logMessage = $messtmp; $pendingSelection = $filename; $reloadContextNode = true; AJXP_Logger::logAction("Create File", array("file" => $dir . "/" . $filename)); break; //------------------------------------ // UPLOAD //------------------------------------ //------------------------------------ // UPLOAD //------------------------------------ case "upload": $fancyLoader = false; if (isset($fileVars["Filedata"])) { $fancyLoader = true; if ($dir != "") { $dir = "/" . base64_decode($dir); } } if ($dir != "") { $rep_source = "/{$dir}"; } else { $rep_source = ""; } $destination = $rep_source; $logMessage = ""; //$fancyLoader = false; foreach ($fileVars as $boxName => $boxData) { if ($boxName != "Filedata" && substr($boxName, 0, 9) != "userfile_") { continue; } if ($boxName == "Filedata") { $fancyLoader = true; } $err = AJXP_Utils::parseFileDataErrors($boxData, $fancyLoader); if ($err != null) { $errorMessage = $err; break; } $userfile_name = $boxData["name"]; $userfile_name = AJXP_Utils::processFileName($userfile_name); if (!$this->SSHOperation->uploadFile($boxData["tmp_name"], $this->makeName($destination . "/" . $userfile_name))) { $errorMessage = ($fancyLoader ? "411 " : "") . "{$mess['33']} " . $userfile_name; break; } $logMessage .= "{$mess['34']} " . SystemTextEncoding::toUTF8($userfile_name) . " {$mess['35']} {$dir}"; AJXP_Logger::logAction("Upload File", array("file" => $dir . "/" . $userfile_name)); } if ($fancyLoader) { if (isset($errorMessage)) { header('HTTP/1.0 ' . $errorMessage); die('Error ' . $errorMessage); } else { header('HTTP/1.0 200 OK'); die("200 OK"); } } else { print "<html><script language=\"javascript\">\n"; if (isset($errorMessage)) { print "\n if(parent.ajaxplorer.actionBar.multi_selector)parent.ajaxplorer.actionBar.multi_selector.submitNext('" . str_replace("'", "\\'", $errorMessage) . "');"; } else { print "\n if(parent.ajaxplorer.actionBar.multi_selector)parent.ajaxplorer.actionBar.multi_selector.submitNext();"; } print "</script></html>"; } exit; break; //------------------------------------ // Public URL //------------------------------------ //------------------------------------ // Public URL //------------------------------------ case "public_url": $file = SystemTextEncoding::fromUTF8($file); $url = $this->makePubliclet($file, $password, $expiration); header("Content-type:text/plain"); echo $url; exit(1); break; //------------------------------------ // XML LISTING //------------------------------------ //------------------------------------ // XML LISTING //------------------------------------ case "ls": // BACKWARD COMPATIBILTY if (isset($httpVars["options"])) { if ($httpVars["options"] == "al") { $mode = "file_list"; } else { if ($httpVars["options"] == "a") { $mode = "search"; } else { if ($httpVars["options"] == "d") { $skipZip = "true"; } } } // skip "complete" mode that was in fact quite the same as standard tree listing (dz) } if (!isset($dir) || $dir == "/") { $dir = ""; } $searchMode = $fileListMode = $completeMode = false; if (isset($mode)) { if ($mode == "search") { $searchMode = true; } else { if ($mode == "file_list") { $fileListMode = true; } else { if ($mode == "complete") { $completeMode = true; } } } } $nom_rep = $dir; //AJXP_Exception::errorToXml($nom_rep); $result = $this->SSHOperation->listFilesIn($nom_rep); $metaData = array(); if (RecycleBinManager::recycleEnabled() && RecycleBinManager::currentLocationIsRecycle($dir)) { $metaData["ajxp_mime"] = "ajxp_recycle"; } AJXP_XMLWriter::renderHeaderNode(AJXP_Utils::xmlEntities($dir, true), AJXP_Utils::xmlEntities(basename($dir), true), false, $metaData); foreach ($result as $file) { $attributes = ""; $fileName = SystemTextEncoding::toUTF8($file["name"]); $icon = AJXP_Utils::mimetype($fileName, "image", $file["isDir"] == 1); if ($searchMode) { if ($file["isDir"] == 0) { $attributes = "is_file=\"true\" icon=\"" . SystemTextEncoding::toUTF8($icon) . "\""; } } else { if ($fileListMode) { $atts = array(); $atts[] = "is_file=\"" . (1 - $file["isDir"]) . "\""; $atts[] = "is_image=\"" . AJXP_Utils::is_image($fileName) . "\""; $atts[] = "mimestring=\"" . AJXP_Utils::mimetype($fileName, "type", $file["isDir"] == 1) . "\""; $atts[] = "ajxp_modiftime=\"" . $this->dateModif($file["time"]) . "\""; $atts[] = "filesize=\"" . AJXP_Utils::roundSize($file["size"]) . "\""; $atts[] = "bytesize=\"" . $file["size"] . "\""; $atts[] = "filename=\"" . str_replace("&", "&", $dir . "/" . $fileName) . "\""; $atts[] = "icon=\"" . ($file["isDir"] == 1 ? "folder.png" : SystemTextEncoding::toUTF8($icon)) . "\""; $attributes = join(" ", $atts); } else { if ($file["isDir"] == 1) { $link = SERVER_ACCESS . "?dir=" . $dir . "/" . $fileName; $link = urlencode($link); $folderBaseName = str_replace("&", "&", $fileName); $folderFullName = "{$dir}/" . $folderBaseName; $parentFolderName = $dir; if (!$completeMode) { $icon = "folder.png"; $openicon = "folder_open.png"; if (preg_match("/\\.zip\$/", $file["name"])) { $icon = $openicon = CLIENT_RESOURCES_FOLDER . "/images/actions/16/accessories-archiver.png"; } $attributes = "icon=\"{$icon}\" openicon=\"{$openicon}\" filename=\"" . $folderFullName . "\" src=\"{$link}\""; } } } } if (strlen($attributes) > 0) { print "<tree text=\"" . str_replace("&", "&", SystemTextEncoding::toUTF8($this->SSHOperation->unescapeFileName($file["name"]))) . "\" {$attributes}>"; print "</tree>"; } } AJXP_XMLWriter::close(); exit(1); break; } if (isset($logMessage) || isset($errorMessage)) { $xmlBuffer .= AJXP_XMLWriter::sendMessage(isset($logMessage) ? $logMessage : null, isset($errorMessage) ? $errorMessage : null, false); } if (isset($requireAuth)) { $xmlBuffer .= AJXP_XMLWriter::requireAuth(false); } if (isset($reloadContextNode)) { if (!isset($pendingSelection)) { $pendingSelection = ""; } $xmlBuffer .= AJXP_XMLWriter::reloadDataNode("", $pendingSelection, false); } if (isset($reloadDataNode)) { $xmlBuffer .= AJXP_XMLWriter::reloadDataNode($reloadDataNode, "", false); } if (isset($reload_current_node) && $reload_current_node == "true") { $xmlBuffer .= AJXP_XMLWriter::reloadCurrentNode(false); } if (isset($reload_dest_node) && $reload_dest_node != "") { $xmlBuffer .= AJXP_XMLWriter::reloadNode($reload_dest_node, false); } if (isset($reload_file_list)) { $xmlBuffer .= AJXP_XMLWriter::reloadFileList($reload_file_list, false); } return $xmlBuffer; }
public function filterNodeName($nodePath, $nodeName, &$isLeaf, $lsOptions) { $showHiddenFiles = $this->getFilteredOption("SHOW_HIDDEN_FILES", $this->repository->getId()); $isLeaf = is_file($nodePath . "/" . $nodeName) || AJXP_Utils::isBrowsableArchive($nodeName); if (AJXP_Utils::isHidden($nodeName) && !$showHiddenFiles) { return false; } $nodeType = "d"; if ($isLeaf) { if (AJXP_Utils::isBrowsableArchive($nodeName)) { $nodeType = "z"; } else { $nodeType = "f"; } } if (!$lsOptions[$nodeType]) { return false; } if ($nodeType == "d") { if (RecycleBinManager::recycleEnabled() && $nodePath . "/" . $nodeName == RecycleBinManager::getRecyclePath()) { return false; } return !$this->filterFolder($nodeName); } else { if ($nodeName == "." || $nodeName == "..") { return false; } if (RecycleBinManager::recycleEnabled() && $nodePath == RecycleBinManager::getRecyclePath() && $nodeName == RecycleBinManager::getCacheFileName()) { return false; } return !$this->filterFile($nodeName); } }
/** * @param AJXP_Node $ajxpNode * @param bool $parentNode * @param bool $details * @return void */ public function loadNodeInfo(&$ajxpNode, $parentNode = false, $details = false) { $mess = ConfService::getMessages(); $nodeName = basename($ajxpNode->getPath()); $metaData = $ajxpNode->metadata; if (!isset($metaData["is_file"])) { $isLeaf = is_file($ajxpNode->getUrl()) || AJXP_Utils::isBrowsableArchive($nodeName); $metaData["is_file"] = $isLeaf ? "1" : "0"; } else { $isLeaf = $metaData["is_file"] == "1" ? true : false; } $metaData["filename"] = $ajxpNode->getPath(); if (RecycleBinManager::recycleEnabled() && $ajxpNode->getPath() == RecycleBinManager::getRelativeRecycle()) { $recycleIcon = $this->countFiles($ajxpNode->getUrl(), false, true) > 0 ? "trashcan_full.png" : "trashcan.png"; $metaData["icon"] = $recycleIcon; $metaData["mimestring"] = $mess[122]; $ajxpNode->setLabel($mess[122]); $metaData["ajxp_mime"] = "ajxp_recycle"; } else { $mimeData = AJXP_Utils::mimeData($ajxpNode->getUrl(), !$isLeaf); $metaData["mimestring_id"] = $mimeData[0]; //AJXP_Utils::mimetype($ajxpNode->getUrl(), "type", !$isLeaf); $metaData["icon"] = $mimeData[1]; //AJXP_Utils::mimetype($nodeName, "image", !$isLeaf); if ($metaData["icon"] == "folder.png") { $metaData["openicon"] = "folder_open.png"; } if (!$isLeaf) { $metaData["ajxp_mime"] = "ajxp_folder"; } } //if ($lsOptions["l"]) { $metaData["file_group"] = @filegroup($ajxpNode->getUrl()) || "unknown"; $metaData["file_owner"] = @fileowner($ajxpNode->getUrl()) || "unknown"; $crtPath = $ajxpNode->getPath(); $vRoots = $this->repository->listVirtualRoots(); $metaData["ajxp_readonly"] = "false"; if (!@$this->isWriteable($ajxpNode->getUrl())) { $metaData["ajxp_readonly"] = "true"; } if (!empty($crtPath)) { if (isset($vRoots[ltrim($crtPath, "/")])) { $metaData["ajxp_readonly"] = $vRoots[ltrim($crtPath, "/")]["right"] == "r" ? "true" : "false"; } } else { if (count($vRoots)) { $metaData["ajxp_readonly"] = "true"; } } $fPerms = @fileperms($ajxpNode->getUrl()); if ($fPerms !== false) { $fPerms = substr(decoct($fPerms), $isLeaf ? 2 : 1); } else { $fPerms = '0000'; } $metaData["file_perms"] = $fPerms; $datemodif = $this->date_modif($ajxpNode->getUrl()); $metaData["ajxp_modiftime"] = $datemodif ? $datemodif : "0"; $metaData["ajxp_description"] = $metaData["ajxp_relativetime"] = $mess[4] . " " . AJXP_Utils::relativeDate($datemodif, $mess); $metaData["bytesize"] = 0; if ($isLeaf) { $metaData["bytesize"] = filesize($ajxpNode->getUrl()); } $metaData["filesize"] = AJXP_Utils::roundSize($metaData["bytesize"]); if (AJXP_Utils::isBrowsableArchive($nodeName)) { $metaData["ajxp_mime"] = "ajxp_browsable_archive"; } if ($details == "minimal") { $miniMeta = array("is_file" => $metaData["is_file"], "filename" => $metaData["filename"], "bytesize" => $metaData["bytesize"], "ajxp_modiftime" => $metaData["ajxp_modiftime"]); $ajxpNode->mergeMetadata($miniMeta); } else { $ajxpNode->mergeMetadata($metaData); } }
function listing($nom_rep, $dir_only = false) { $mess = ConfService::getMessages(); $size_unit = $mess["byte_unit_symbol"]; $sens = 0; $ordre = "nom"; $poidstotal = 0; $contents = @ftp_rawlist($this->connect, $nom_rep); if (!is_array($contents)) { // We might have timed out, so let's go passive if not done yet global $_SESSION; if ($_SESSION["ftpPasv"] == "true") { return array(); } @ftp_pasv($this->connect, TRUE); $_SESSION["ftpPasv"] = "true"; $contents = @ftp_rawlist($this->connect, $nom_rep); if (!is_array($contents)) { return array(); } } foreach ($contents as $entry) { $info = array(); $vinfo = preg_split("/[\\s]+/", $entry, 9); if ($vinfo[0] !== "total") { $info['chmod'] = $vinfo[0]; $info['num'] = $vinfo[1]; $info['owner'] = $vinfo[2]; $info['group'] = $vinfo[3]; $info['size'] = $vinfo[4]; $info['month'] = $vinfo[5]; $info['day'] = $vinfo[6]; $info['timeOrYear'] = $vinfo[7]; $info['name'] = $vinfo[8]; } $file = trim($info['name']); $filetaille = trim($info['size']); if (strstr($info["timeOrYear"], ":")) { $info["time"] = $info["timeOrYear"]; $info["year"] = date("Y"); } else { $info["time"] = '09:00'; $info["year"] = $info["timeOrYear"]; } $filedate = trim($info['day']) . " " . trim($info['month']) . " " . trim($info['year']) . " " . trim($info['time']); $filedate = strtotime($filedate); $fileperms = trim($info['chmod']); $info['chmod1'] = $this->convertingChmod(trim($info['chmod'])); $isDir = false; $info['modifTime'] = $filedate; $info['isDir'] = false; //gestion des Simbolic Link pour la navigation if (strpos($fileperms, "d") !== FALSE || strpos($fileperms, "l") !== FALSE) { if (strpos($fileperms, "l") !== FALSE) { $test = explode(" ->", $file); $file = $test[0]; $info['name'] = $file; } $isDir = true; $info['isDir'] = true; } if ($file != "." && $file != "..") { if (RecycleBinManager::recycleEnabled() && $nom_rep == $this->repository->getOption("PATH") . "/" . $this->repository->getOption("RECYCLE_BIN") && $file == RecycleBinManager::getCacheFileName()) { continue; } $poidstotal += $filetaille; if ($isDir) { if (RecycleBinManager::recycleEnabled() && $this->repository->getOption("PATH") . "/" . $this->repository->getOption("RECYCLE_BIN") == "{$nom_rep}/{$file}") { continue; } $liste_rep[$file] = $info; $liste_rep[$file]['icon'] = Utils::mimetype("{$nom_rep}/{$file}", "image", $isDir); $liste_rep[$file]['type'] = Utils::mimetype("{$nom_rep}/{$file}", "type", $isDir); } else { if (!$dir_only) { $liste_fic[$file] = $info; $liste_fic[$file]['icon'] = Utils::mimetype("{$nom_rep}/{$file}", "image", $isDir); $liste_fic[$file]['type'] = Utils::mimetype("{$nom_rep}/{$file}", "type", $isDir); } else { if (preg_match("/\\.zip\$/", $file) && ConfService::zipEnabled()) { if (!isset($liste_zip)) { $liste_zip = array(); } $liste_zip[$file] = $file; } } } } } if (isset($liste_fic) && is_array($liste_fic)) { if ($ordre == "nom") { if ($sens == 0) { ksort($liste_fic); } else { krsort($liste_fic); } } else { if ($ordre == "mod") { if ($sens == 0) { arsort($liste_fic); } else { asort($liste_fic); } } else { if ($ordre == "taille" || $ordre == "type") { if ($sens == 0) { asort($liste_fic); } else { arsort($liste_fic); } } else { if ($sens == 0) { ksort($liste_fic); } else { krsort($liste_fic); } } } } if ($ordre != "nom") { foreach ($liste_fic as $index => $value) { $liste_fic[$index] = Utils::mimetype($index, "image", false); } } } else { $liste_fic = array(); } if (isset($liste_rep) && is_array($liste_rep)) { if ($ordre == "mod") { if ($sens == 0) { arsort($liste_rep); } else { asort($liste_rep); } } else { if ($sens == 0) { ksort($liste_rep); } else { krsort($liste_rep); } } if ($ordre != "nom") { foreach ($liste_rep as $index => $value) { $liste_rep[$index] = $index; } } } else { $liste_rep = array(); } $liste = Utils::mergeArrays($liste_rep, $liste_fic); if (isset($liste_zip)) { $liste = Utils::mergeArrays($liste, $liste_zip); } if ($poidstotal >= 1073741824) { $poidstotal = round($poidstotal / 1073741824 * 100) / 100 . " G" . $size_unit; } elseif ($poidstotal >= 1048576) { $poidstotal = round($poidstotal / 1048576 * 100) / 100 . " M" . $size_unit; } elseif ($poidstotal >= 1024) { $poidstotal = round($poidstotal / 1024 * 100) / 100 . " K" . $size_unit; } else { $poidstotal = $poidstotal . " " . $size_unit; } return array($liste, $poidstotal); }
function copyOrMoveFile($destDir, $srcFile, &$error, &$success, $move = false) { $mess = ConfService::getMessages(); $destFile = $this->urlBase . $destDir . "/" . basename($srcFile); $realSrcFile = $this->urlBase . $srcFile; if (!file_exists($realSrcFile)) { $error[] = $mess[100] . $srcFile; return; } if (dirname($realSrcFile) == dirname($destFile)) { if ($move) { $error[] = $mess[101]; return; } else { $base = basename($srcFile); $i = 1; if (is_file($realSrcFile)) { $dotPos = strrpos($base, "."); if ($dotPos > -1) { $radic = substr($base, 0, $dotPos); $ext = substr($base, $dotPos); } } // auto rename file $i = 1; $newName = $base; while (file_exists($this->urlBase . $destDir . "/" . $newName)) { $suffix = "-{$i}"; if (isset($radic)) { $newName = $radic . $suffix . $ext; } else { $newName = $base . $suffix; } $i++; } $destFile = $this->urlBase . $destDir . "/" . $newName; } } if (!is_file($realSrcFile)) { $errors = array(); $succFiles = array(); if ($move) { if (file_exists($destFile)) { $this->deldir($destFile); } $res = rename($realSrcFile, $destFile); } else { $dirRes = $this->dircopy($realSrcFile, $destFile, $errors, $succFiles); } if (count($errors) || isset($res) && $res !== true) { $error[] = $mess[114]; return; } } else { if ($move) { if (file_exists($destFile)) { unlink($destFile); } $res = rename($realSrcFile, $destFile); AJXP_Controller::applyHook("move.metadata", array($realSrcFile, $destFile, false)); } else { try { $src = fopen($realSrcFile, "r"); $dest = fopen($destFile, "w"); while (!feof($src)) { stream_copy_to_stream($src, $dest, 4096); } fclose($src); fclose($dest); AJXP_Controller::applyHook("move.metadata", array($realSrcFile, $destFile, true)); } catch (Exception $e) { $error[] = $e->getMessage(); return; } } } if ($move) { // Now delete original // $this->deldir($realSrcFile); // both file and dir $messagePart = $mess[74] . " " . SystemTextEncoding::toUTF8($destDir); if (RecycleBinManager::recycleEnabled() && $destDir == RecycleBinManager::getRelativeRecycle()) { RecycleBinManager::fileToRecycle($srcFile); $messagePart = $mess[123] . " " . $mess[122]; } if (isset($dirRes)) { $success[] = $mess[117] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $messagePart . " (" . SystemTextEncoding::toUTF8($dirRes) . " " . $mess[116] . ") "; } else { $success[] = $mess[34] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $messagePart; } } else { if (RecycleBinManager::recycleEnabled() && $destDir == "/" . $this->repository->getOption("RECYCLE_BIN")) { RecycleBinManager::fileToRecycle($srcFile); } if (isset($dirRes)) { $success[] = $mess[117] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $mess[73] . " " . SystemTextEncoding::toUTF8($destDir) . " (" . SystemTextEncoding::toUTF8($dirRes) . " " . $mess[116] . ")"; } else { $success[] = $mess[34] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $mess[73] . " " . SystemTextEncoding::toUTF8($destDir); } } }
/** * @param String $destDir url of destination dir * @param String $srcFile url of source file * @param Array $error accumulator for error messages * @param Array $success accumulator for success messages * @param bool $move Whether to copy or move * @param array $srcRepoData Set of data concerning source repository: base_url, wrapper_name and recycle option * @param array $destRepoData Set of data concerning destination repository: base_url, wrapper_name and chmod option */ protected function copyOrMoveFile($destDir, $srcFile, &$error, &$success, $move = false, $srcRepoData = array(), $destRepoData = array()) { $srcUrlBase = $srcRepoData['base_url']; $srcWrapperName = $srcRepoData['wrapper_name']; $srcRecycle = $srcRepoData['recycle']; $destUrlBase = $destRepoData['base_url']; $destWrapperName = $destRepoData['wrapper_name']; $mess = ConfService::getMessages(); $bName = basename($srcFile); $localName = ''; AJXP_Controller::applyHook("dl.localname", array($srcFile, &$localName, $srcWrapperName)); if (!empty($localName)) { $bName = $localName; } $destFile = $destUrlBase . $destDir . "/" . $bName; $realSrcFile = $srcUrlBase . $srcFile; if (is_dir(dirname($realSrcFile)) && strpos($destFile, rtrim($realSrcFile, "/") . "/") === 0) { $error[] = $mess[101]; return; } if (!file_exists($realSrcFile)) { $error[] = $mess[100] . $srcFile; return; } if (!$move) { AJXP_Controller::applyHook("node.before_create", array(new AJXP_Node($destFile), filesize($realSrcFile))); } if (dirname($realSrcFile) == dirname($destFile)) { if ($move) { $error[] = $mess[101]; return; } else { $base = basename($srcFile); $i = 1; if (is_file($realSrcFile)) { $dotPos = strrpos($base, "."); if ($dotPos > -1) { $radic = substr($base, 0, $dotPos); $ext = substr($base, $dotPos); } } // auto rename file $i = 1; $newName = $base; while (file_exists($destUrlBase . $destDir . "/" . $newName)) { $suffix = "-{$i}"; if (isset($radic)) { $newName = $radic . $suffix . $ext; } else { $newName = $base . $suffix; } $i++; } $destFile = $destUrlBase . $destDir . "/" . $newName; } } if (!is_file($realSrcFile)) { $errors = array(); $succFiles = array(); if ($move) { AJXP_Controller::applyHook("node.before_path_change", array(new AJXP_Node($realSrcFile))); if (file_exists($destFile)) { $this->deldir($destFile, $destRepoData); } $res = rename($realSrcFile, $destFile); } else { $dirRes = $this->dircopy($realSrcFile, $destFile, $errors, $succFiles, false, true, $srcRepoData, $destRepoData); } if (count($errors) || isset($res) && $res !== true) { $error[] = $mess[114]; return; } else { AJXP_Controller::applyHook("node.change", array(new AJXP_Node($realSrcFile), new AJXP_Node($destFile), !$move)); } } else { if ($move) { AJXP_Controller::applyHook("node.before_path_change", array(new AJXP_Node($realSrcFile))); if (file_exists($destFile)) { unlink($destFile); } $res = rename($realSrcFile, $destFile); AJXP_Controller::applyHook("node.change", array(new AJXP_Node($realSrcFile), new AJXP_Node($destFile), false)); } else { try { $this->filecopy($realSrcFile, $destFile, $srcWrapperName, $destWrapperName); $this->changeMode($destFile, $destRepoData); AJXP_Controller::applyHook("node.change", array(new AJXP_Node($realSrcFile), new AJXP_Node($destFile), true)); } catch (Exception $e) { $error[] = $e->getMessage(); return; } } } if ($move) { // Now delete original // $this->deldir($realSrcFile); // both file and dir $messagePart = $mess[74] . " " . SystemTextEncoding::toUTF8($destDir); if (RecycleBinManager::recycleEnabled() && $destDir == RecycleBinManager::getRelativeRecycle()) { RecycleBinManager::fileToRecycle($srcFile); $messagePart = $mess[123] . " " . $mess[122]; } if (isset($dirRes)) { $success[] = $mess[117] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $messagePart . " (" . SystemTextEncoding::toUTF8($dirRes) . " " . $mess[116] . ") "; } else { $success[] = $mess[34] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $messagePart; } } else { if (RecycleBinManager::recycleEnabled() && $destDir == "/" . $srcRecycle) { RecycleBinManager::fileToRecycle($srcFile); } if (isset($dirRes)) { $success[] = $mess[117] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $mess[73] . " " . SystemTextEncoding::toUTF8($destDir) . " (" . SystemTextEncoding::toUTF8($dirRes) . " " . $mess[116] . ")"; } else { $success[] = $mess[34] . " " . SystemTextEncoding::toUTF8(basename($srcFile)) . " " . $mess[73] . " " . SystemTextEncoding::toUTF8($destDir); } } }
function saveCache($value) { if (!RecycleBinManager::recycleEnabled()) { return null; } $cachePath = RecycleBinManager::getRecyclePath() . "/" . RecycleBinManager::getCacheFileName(); $fp = fopen($cachePath, "w"); if ($fp) { fwrite($fp, serialize($value)); fflush($fp); fclose($fp); } }