Your IP : 172.28.240.42


Current Path : /var/www/html/clients/nsmk.e-nk.ru/application/maxsite/plugins/file_manager/php/
Upload File :
Current File : /var/www/html/clients/nsmk.e-nk.ru/application/maxsite/plugins/file_manager/php/fm-ajax.php

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

//error_reporting(E_ALL);
/*
mb_get_info 

FreeBSD

    [internal_encoding] => ISO-8859-1
    [http_input] => 
    [http_output] => pass
    [func_overload] => 0
    [func_overload_list] => no overload
    [mail_charset] => UTF-8
    [mail_header_encoding] => BASE64
    [mail_body_encoding] => BASE64
    [illegal_chars] => 0
    [encoding_translation] => Off
    [language] => neutral
    [detect_order] => Array
        (
            [0] => ASCII
            [1] => UTF-8
        )

    [substitute_character] => 63
    [strict_detection] => Off

Windows

    [internal_encoding] => UTF-8
    [http_input] => 
    [http_output] => pass
    [func_overload] => 0
    [func_overload_list] => no overload
    [mail_charset] => UTF-8
    [mail_header_encoding] => BASE64
    [mail_body_encoding] => BASE64
    [illegal_chars] => 0
    [encoding_translation] => Off
    [language] => neutral
    [detect_order] => Array
        (
            [0] => ASCII
            [1] => UTF-8
        )

    [substitute_character] => 63
    [strict_detection] => Off
*/

// если в наименованиях каталогов, файлов есть две или более точек - убираем, что не было site\uploads\..\
function checkPath($v)
	{
	//$v = preg_replace("/ {1,}\//", '/' , $v);
	return preg_replace("/\.{2,}/", '' , $v);
	}

global $encoding;

if (PHP_OS == 'WINNT')
	$encoding = 'CP1251';
else	$encoding = 'UTF-8';

$return = array();

$CI = & get_instance();
$CI ->load->helper('file');
$CI ->load->helper('directory');

$root 	= getinfo('FCPATH');
	
// REQUEST in POST
$mode	= $CI->input->post('mode', FALSE);


if ($mode == 'loader')
	{
	$return['css']		= read_file(getinfo('plugins_dir') . 'file_manager/css/manager.css');
	$return['html']	= read_file(getinfo('plugins_dir') . 'file_manager/html/manager.html');


	if ($CI->input->post('debug', FALSE) != true)
		{
		$return['js']	= read_file(getinfo('plugins_dir') . 'file_manager/js/json.js')
					. read_file(getinfo('plugins_dir') . 'file_manager/js/noselect.js')
					. read_file(getinfo('plugins_dir') . 'file_manager/js/storage.js')
					. read_file(getinfo('plugins_dir') . 'file_manager/js/jquery.fmeditor.js')
					. read_file(getinfo('plugins_dir') . 'file_manager/js/manager.js')
					. read_file(getinfo('plugins_dir') . 'file_manager/js/swfupload.js')
					. read_file(getinfo('plugins_dir') . 'file_manager/js/jquery.swfupload.js');
		
		}
	}

$command	= $CI->input->post('command', FALSE);
if (!($tasklist	= $CI->input->post('tasklist', FALSE))){$tasklist = array();}

//print $CI->input->post('folder', TRUE);

if (!($u_folder = checkPath($CI->input->post('folder', TRUE)))){echo json_encode(array("error"=>'не указан путь '.$mode ));exit(0);}

//print $u_folder;

// всё приходит в UTF-8, а в системе папки в локальной кодировке, => UTF-8 -> CP1251
$folder = mb_convert_encoding($u_folder, $encoding, "UTF-8");	// $_folder - CP1251

$path = $root . $folder;

$u_path = $root . $u_folder;

// кодировка fm.php = UTF-8

//===============================
//$readdesc	= FALSE;
$writedesc	= FALSE;	// флаг для записи измененных описаний

if (file_exists($path))
	{

	if ($mode == 'newfolder')
		{
		$u_newname	= checkPath($CI->input->post('newname', TRUE));
		$newname	= mb_convert_encoding($u_newname, $encoding, "UTF-8");

		$rs = @mkdir($path . $newname , 0777);
		
		if($rs)
			{
			@chown($path . $newname, get_current_user());
			
			$return['newname'] = $u_newname; 

			$folder		= $folder . $newname . DIRECTORY_SEPARATOR;
			$u_folder	= mb_convert_encoding($folder, "UTF-8", $encoding);

			$return['dir']		= array();
			$return['files']		= array();
			}
		else	{
			$return['error'] = "Не могу создать каталог с именем '$newname' по адресу: '$path'...";
			}
		}

	if ($mode == 'renamefolder')
		{
		$u_newname	= checkPath($CI->input->post('newname', TRUE));
		$newname	= mb_convert_encoding($u_newname, $encoding, "UTF-8");
		$u_oldname	= checkPath($CI->input->post('oldname', TRUE));
		$oldname	= mb_convert_encoding($u_oldname, $encoding, "UTF-8");

		//$newfolder	= preg_replace("/" . $oldname. "\/$/", $newname. "/" , $folder, 1);
		$newfolder	= preg_replace("/" . $oldname. "\\" . DIRECTORY_SEPARATOR . "$/", $newname. DIRECTORY_SEPARATOR , $folder, 1);

		if ($newfolder != $folder)
			{
			$rs = @rename($path, $root . $newfolder);
			if($rs)
				{
				$return['oldfolder']	= $u_folder;
				// готовимся к перечитке каталога
				$folder			= $newfolder;
				$u_folder		= mb_convert_encoding($folder, "UTF-8", $encoding);
				$path			= $root . $newfolder;
				$return['newname']= $u_newname;
				$mode			= 'folder';
				}
			else	$return['error'] = "Не могу переименовать каталог с именем '$oldname' в '$newname'.";
			}
		else	$return['error'] = "Общая ошибка переименнования каталога: $folder = $newfolder...";

		$return['$u_newname'] =$u_newname;
		$return['$newname'] =$newname;
		$return['$u_oldname'] =$u_oldname;
		$return['$oldname'] =$oldname;
		$return['$newfolder'] =$newfolder;
		}

	if ($mode == 'deletefolder')
		{
		$list = '';
		// ensure $dir ends with a slash
		function delTree($dir, $command)
			{
			$l='';

			$files = glob( $dir . '*', GLOB_MARK );
			foreach( $files as $f )
				{
				//if(( substr( $f, -1 ) == '/' ) || ( substr( $f, -1 ) == '\\' ))
				if ( substr( $f, -1 ) == DIRECTORY_SEPARATOR )
					{
					$l.=delTree($f, $command);
					}
				else	{
					if ($command == 'run')
						unlink( $f );
					else $l.="$f\n";
					}
				}

			if ($command == 'run')
				return rmdir( $dir );
			else	return $l."$dir\n";
			}

		$return['list'] = mb_convert_encoding(delTree($path, $command), "UTF-8", $encoding);
		}

// READ DESCRIPTION

	if (($mode == 'folder') || ($mode == 'loader') || ($mode == 'changedesc') || ($mode == 'renamefile') || ($mode == 'deletefiles'))		// чтение _mso_i/_mso_descriptions.dat в $mso_descritions 
		{
		require_once "read_description.inc.php";
		$description =  fm_read_description($path, &$fn_description);
		//$return['desc'] = $description;
		}

	if ($mode == 'loader')
		{
		//if (isset($description['/tasks/']))
		//	{	
		//	$localtasklist = json_decode($description['/tasks/']);
		//	}
		if (isset($description['/settings/']))
			{	

			// СТРОЕ НАСЛЕДИЕ string -> boolean

			$return['settings'] = array();

			foreach (json_decode($description['/settings/']) as $name => $set)
				{
				$set->state = (boolean) $set->state;

				$return['settings'][$name] = $set;
				}

			// end

			//$return['settings'] = $description['/settings/'];
			}
		}

	if ($mode == 'renamefile')
		{
		$u_newname	= checkPath($CI->input->post('newname', TRUE));
		$newname	= mb_convert_encoding($u_newname, $encoding, "UTF-8");
		$u_oldname	= checkPath($CI->input->post('oldname', TRUE));
		$oldname	= mb_convert_encoding($u_oldname, $encoding, "UTF-8");

		if ($newname != $oldname)
			{
			$rs = @rename($path . $oldname, $path . $newname);
			if ($rs)
				{
				$return['newname']	= $u_newname;
				$return['oldname']		= $u_oldname;
				
				if (isset($description[$u_oldname]))
					{
					$writedesc = TRUE; // для записи в файл
					$description[$u_newname] = $description[$u_oldname];
					unset($description[$u_oldname]);
					}

				require_once "file.inc.php";

				$gf = getFile($path, $newname);

				if (isset($fm_allowed_image[$gf['ext']]))
					{
					$tr = array();
					foreach ($tasklist as $taskname)
						{
						if ($taskname == 'image')
							$tr[$taskname] = get_info_task($taskname, $path, $newname);
						else	{
							$oldmini = prepare_task($taskname, $oldname);
							$newmini = prepare_task($taskname, $newname);

							$rs = @rename($path . $oldmini, $path . $newmini);
							if (($rs) && ($r = get_info_task($taskname, $path, $newname))) // !!! $newmini = /mini/name
								$tr[$taskname] = $r;
							}
						}

					if ($tr)
						{
						$gf['list'] = $tr;
						}
					}

				$return['file'] = $gf;
				}
			else	$return['error'] = "Не могу переименовать файл с именем '$oldname' в '$newname'.";
			}
		else	$return['error'] = "Не могу переименовать файл, имена совпадают '$oldname' = '$newname'.";

		//$return['error'] = 'проверка';
		}

	if ($mode == 'deletefiles')
		{
		require_once "file.inc.php";

		$files = $CI->input->post('files', TRUE);
		
		for ($i = 0, $L=count($files); $i < $L; $i++)
			{
			$u_name = checkPath($files[$i]);
			$name = mb_convert_encoding($u_name, $encoding, "UTF-8");

			$return['files'][$u_name] = array("file"=>$u_path . $u_name, "delete"=> unlink($path . $name));

			foreach ($tasklist as $taskname)
				if ($taskname != 'image')
					@unlink($path . prepare_task($taskname, $name));
					
			// удаляем описания файлов
			if (isset($description[$u_name]))
				{
				$writedesc = TRUE; 
				unset($description[$u_name]);
				}
			}
		}

	if ($mode == 'changedesc')
		{
		$u_filename	= $CI->input->post('filename', TRUE);
		$u_desc		= $CI->input->post('desc', TRUE);

		$description[$u_filename] = $u_desc;
		
		$return['filename']	= $u_filename;
		$return['desc']	= $u_desc;

		$writedesc = TRUE;
		}

// WRITE DESCRIPTION
	if ($writedesc == TRUE)
		{
		write_file($fn_description, serialize($description));	// сохраняем данные
		//print "fn = $fn_description";
		}

	if (($mode == 'folder') || ($mode == 'loader'))
		{
		//print $path;
		//print_r(get_dir_file_info($path));
		//print_r(get_filenames($path));

		require_once "file.inc.php"; 
		
		$files = scandir($path);

//print $folder;
//print_r($files);

		natcasesort($files);

		$dir	= array();
		$fs	= array();

		if(count($files) > 2)	/* The 2 accounts for . and .. */
			{						
			foreach($files as $file)
				{
				$u_file = mb_convert_encoding($file, "UTF-8", $encoding);

				if(is_file($path . $file))
					{
					$gf = getFile($path, $file);

					if (isset($description[$u_file])) $gf['desc'] = $description[$u_file];

					if (isset($fm_allowed_image[$gf['ext']]))
						{
						$tr = array();

						foreach ($tasklist as $taskname)
							{
							if($r = get_info_task($taskname, $path, $file))
								{
								$tr[$taskname] = $r;
								}
							}
						
						if ($tr)
							{
							$gf['list'] = $tr;
							}
						}

					$fs[$u_file] = $gf;

					}
				else	{
					if ($file == '.' || $file == '..' || $file == 'mini' || $file == '_mso_i') continue;
					if ($folder == ('uploads' . DIRECTORY_SEPARATOR) && ($file == '_mso_float' || $file == 'smiles')) continue;

					$dir[] = array("rel"=>$u_folder. $u_file, "name"=>$u_file);
					}

				}
			}
		$return['dir']	= $dir;
		$return['files']	= $fs;

		if (isset($description['/tasks/']))
			{
			$return['files']['/tasks/'] = json_decode($description['/tasks/']);
			}
		} // folder


	
	$return['folder'] = $u_folder;
	$return['refresh'] = $CI->input->post('refresh', FALSE);

	echo json_encode($return);
	}
else	{
	echo json_encode(array("error"=>'указан несуществующий путь: ' . $u_path));
	}