virt2/api/soft/fm/include/copy_move.php

210 lines
6.9 KiB
PHP
Executable File

<?php
// ensure this file is being included by a parent file
if( !defined( '_JEXEC' ) && !defined( '_VALID_MOS' ) ) die( 'Restricted access' );
/**
* @version $Id: copy_move.php 242 2015-08-19 06:29:26Z soeren $
* @package eXtplorer
* @copyright soeren 2007-2015
* @author The eXtplorer project (http://extplorer.net)
* @author The The QuiX project (http://quixplorer.sourceforge.net)
*
* @license
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* Alternatively, the contents of this file may be used under the terms
* of the GNU General Public License Version 2 or later (the "GPL"), in
* which case the provisions of the GPL are applicable instead of
* those above. If you wish to allow use of your version of this file only
* under the terms of the GPL and not to allow others to use
* your version of this file under the MPL, indicate your decision by
* deleting the provisions above and replace them with the notice and
* other provisions required by the GPL. If you do not delete
* the provisions above, a recipient may use your version of this file
* under either the MPL or the GPL."
*
*
*/
/**
* File/Directory Copy & Move Functions
*/
function ext_copy_move_items($dir) { // copy/move file/dir
$action = extGetParam( $_REQUEST, 'action' );
if(($GLOBALS["permissions"]&01)!=01){
ext_Result::sendResult( $action, false, $GLOBALS["error_msg"]["accessfunc"]);
}
// CSRF Security Check
if( !ext_checkToken($GLOBALS['__POST']["token"]) ) {
ext_Result::sendResult('tokencheck', false, 'Request failed: Security Token not valid.');
}
// Vars
$first = extGetParam($GLOBALS['__POST'], 'first' );
if($first=="y") $new_dir=$dir;
else $new_dir = extGetParam($GLOBALS['__POST'], "new_dir");
if($new_dir==".") $new_dir="";
$cnt=count($GLOBALS['__POST']["selitems"]);
if (!$new_dir) {
ext_copy_move_dialog($dir);
return;
}
// DO COPY/MOVE
// ALL OK?
if(!@$GLOBALS['ext_File']->file_exists(dirname(get_abs_dir($new_dir)))) {
ext_Result::sendResult( $action, false, dirname(get_abs_dir($new_dir)).": ".$GLOBALS["error_msg"]["targetexist"]);
}
if(!get_show_item($new_dir,"")) {
ext_Result::sendResult( $action, false, $new_dir.": ".$GLOBALS["error_msg"]["accesstarget"]);
}
if(!down_home(get_abs_dir($new_dir))) {
ext_Result::sendResult( $action, false, $new_dir.": ".$GLOBALS["error_msg"]["targetabovehome"]);
}
// copy / move files
$err=false;
for($i=0;$i<$cnt;++$i) {
$tmp = basename(stripslashes($GLOBALS['__POST']["selitems"][$i]));
$new = basename(stripslashes($GLOBALS['__POST']["selitems"][$i]));
if( ext_isFTPMode() ) {
$abs_item = get_item_info($dir,$tmp);
$abs_new_item = $new_dir.'/'.$new;
} else {
$abs_item = get_abs_item($dir,$tmp);
$abs_new_item = get_abs_item($new_dir,$new);
}
$items[$i] = $tmp;
// Check
if($new=="") {
$error[$i]= $GLOBALS["error_msg"]["miscnoname"];
$err=true; continue;
}
if(!@$GLOBALS['ext_File']->file_exists($abs_item)) {
$error[$i]= $GLOBALS["error_msg"]["itemexist"];
$err=true; continue;
}
if(!get_show_item($dir, $tmp)) {
$error[$i]= $GLOBALS["error_msg"]["accessitem"];
$err=true; continue;
}
if(@$GLOBALS['ext_File']->file_exists($abs_new_item)) {
$error[$i]= $GLOBALS["error_msg"]["targetdoesexist"];
$err=true; continue;
}
// Copy / Move
if($action=="copy") {
if(@is_link(ext_TextEncoding::fromUTF8($abs_item)) || get_is_file(ext_TextEncoding::fromUTF8($abs_item))) {
// check file-exists to avoid error with 0-size files (PHP 4.3.0)
if( ext_isFTPMode() ) $abs_item = '/'.$dir.'/'.$abs_item['name'];
$ok=@$GLOBALS['ext_File']->copy( $abs_item ,$abs_new_item); //||@file_exists($abs_new_item);
}
elseif(@get_is_dir(ext_TextEncoding::fromUTF8($abs_item))) {
$ext_copy_dir = ext_isFTPMode() ? '/'.$dir.'/'.$abs_item['name'].'/' : $abs_item;
if( ext_isFTPMode() ) $abs_new_item .= '/';
$ok=$GLOBALS['ext_File']->ext_copy_dir( $ext_copy_dir, $abs_new_item);
}
}
else {
$ok= $GLOBALS['ext_File']->rename($abs_item,$abs_new_item);
}
if($ok===false || PEAR::isError( $ok ) ) {
$error[$i]=($action=="copy"?
$GLOBALS["error_msg"]["copyitem"]:
$GLOBALS["error_msg"]["moveitem"]
);
if( PEAR::isError( $ok ) ) {
$error[$i].= ' ['.$ok->getMessage().']';
}
$err=true; continue;
}
$error[$i]=NULL;
}
if($err) { // there were errors
$err_msg="";
for($i=0;$i<$cnt;++$i) {
if($error[$i]==NULL) continue;
$err_msg .= $items[$i]." : ".$error[$i]."\n";
}
ext_Result::sendResult( $action, false, $err_msg);
}
ext_Result::sendResult( $action, true, 'The File(s)/Directory(s) were successfully '.($action=='copy'?'copied':'moved').'.' );
}
function ext_copy_move_dialog($dir='') {
$action = extGetParam( $_REQUEST, 'action' );
?>
{
"xtype": "form",
"id": "simpleform",
"labelWidth": 125,
"width": "340",
"url":"<?php echo basename( $GLOBALS['script_name']) ?>",
"dialogtitle": "<?php echo 'Copy/Move' ?>",
"frame": true,
"items": [{
"xtype": "textfield",
"fieldLabel": "Destination",
"name": "new_dir",
"value": "<?php echo $dir ?>/",
"width":175,
"allowBlank":false
}],
"buttons": [{
text: '<?php echo ext_Lang::msg( 'btncreate', true ) ?>',
handler: function() {
form = Ext.getCmp('simpleform').getForm();
statusBarMessage( 'Please wait...', true );
var requestParams = getRequestParams();
requestParams.confirm = 'true';
requestParams.action = '<?php echo $action ?>';
form.submit({
//reset: true,
reset: false,
success: function(form, action) {
statusBarMessage( action.result.message, false, true );
try{
dirTree.getSelectionModel().getSelectedNode().reload();
} catch(e) {}
datastore.reload();
Ext.getCmp("dialog").destroy();
},
failure: function(form, action) {
if( !action.result ) return;
Ext.MessageBox.alert('Error!', action.result.error);
statusBarMessage( action.result.error, false, false );
},
scope: form,
// add some vars to the request, similar to hidden fields
params: requestParams
});
}
},{
text: '<?php echo ext_Lang::msg( 'btncancel', true ) ?>',
handler: function() { Ext.getCmp("dialog").destroy(); }
}
]
}
<?php
}
?>