<?php
if(!defined('__KIMS__')) exit;

checkAdmin(0);

$isPack		= '';
$isUpload	= false;
$extPath	= $g['path_tmp'].'app';
$extPath1	= $extPath.'/';
$typeset	= array('layout'=>'레이아웃이','widget'=>'위젯이','switch'=>'스위치가','bbstheme'=>'게시판테마가');

if ($remote == 'Y')
{
	$saveFile	= $extPath.'/rb_'.$type.'_app.zip';

	if (is_file($saveFile))
	{
		if (!is_dir($folder.$subfolder))
		{
			unlink($saveFile);
			getLink('','','설치경로 정보가 맞지않아 설치가 중단되었습니다. 직접 다운로드 받아 설치하세요.','');			
		}
		if (is_file($folder.$insfolder.'/main.php'))
		{
			unlink($saveFile);
			getLink('','','이미 동일한 폴더명('.basename($insfolder).')의 패키지가 존재합니다.','');
		}

		require $g['path_core'].'opensrc/unzip/ArchiveExtractor.class.php';
		require $g['path_core'].'function/dir.func.php';
		
		$extractor = new ArchiveExtractor();
		$extractor -> extractArchive($saveFile,$extPath1);
		unlink($saveFile);

		// 구형/수동 제작 게시판테마 중 파일이 ZIP 최상단에 있는 형식도 지원합니다.
		if ($type == 'bbstheme' && is_file($extPath1.'name.txt'))
		{
			$file = preg_replace('/\.zip$/i','',substr($realname,12));
			if (!preg_match('/^[A-Za-z0-9_-]{1,64}$/',$file))
			{
				getLink('reload','parent.','게시판테마의 설치 폴더명이 올바르지 않습니다. 영문, 숫자, 밑줄 및 하이픈만 사용해 주세요.','');
			}

			$installPath = $folder.$subfolder.$file;
			if (is_file($installPath.'/name.txt'))
			{
				$isPack = $file;
			}
			else if ((is_dir($installPath) || mkdir($installPath,0755,true)) && is_writable($installPath))
			{
				@chmod($installPath,0755);
				DirCopy($extPath,$installPath);
				$isUpload = is_file($installPath.'/name.txt');
			}
		}

		$opendir = opendir($extPath1);
		while(!$isUpload && !$isPack && false !== ($file = readdir($opendir)))
		{
			if($file != '.' && $file != '..' && is_file($extPath1.$file.'/name.txt'))
			{
				if(is_file($folder.$subfolder.$file.'/name.txt'))
				{
					$isPack = $file;
					break;
				}
				
				mkdir($folder.$subfolder.$file,0707);
				@chmod($folder.$subfolder.$file,0707);
				DirCopy($extPath1.$file,$folder.$subfolder.$file);				
				$isUpload = true;
				break;
			}
		}
		closedir($opendir);

		DirDelete($extPath);
		mkdir($extPath,0707);
		@chmod($extPath,0707);
		
		if ($isPack)
		{
			getLink('','','이미 동일한 폴더명('.$isPack.')의 '.$typeset[$type].' 존재합니다.','');
		}
		if (!$isUpload)
		{
			getLink('','','패키지규격에 맞지 않는 파일입니다','');		
		}
	}

	getLink($g['s'].'/?r='.$r.'&m=admin&module='.$m.'&front=pack&type='.($type=='bbstheme'?'theme':$type).'&insfolder='.$insfolder.($mobile?'&mobile='.$mobile:''),'parent.','['.(getFolderName($folder.$insfolder)).'] '.$typeset[$type].' 정상적으로 설치되었습니다.','');
}
else {

	if (!isset($_FILES['upfile']) || (int)$_FILES['upfile']['error'] !== UPLOAD_ERR_OK)
	{
		getLink('reload','parent.','패키지 업로드에 실패했습니다. 파일 크기와 서버 업로드 제한을 확인해 주세요.','');
	}

	$tmpname	= $_FILES['upfile']['tmp_name'];
	$realname	= basename($_FILES['upfile']['name']);
	$fileExt	= strtolower(getExt($realname));
	$saveFile	= $extPath1.$date['totime'].'.zip';

	if (is_uploaded_file($tmpname))
	{
		if ($type == 'layout')
		{
			if (substr($realname,0,10) != 'rb_layout_')
			{
				getLink('reload','parent.','레이아웃 패키지가 아닙니다.','');
			}
		}
		if ($type == 'widget')
		{
			if (substr($realname,0,10) != 'rb_widget_')
			{
				getLink('reload','parent.','위젯 패키지가 아닙니다.','');
			}
		}
		if ($type == 'switch')
		{
			if (substr($realname,0,10) != 'rb_switch_')
			{
				getLink('reload','parent.','스위치 패키지가 아닙니다.','');
			}
		}
		if ($type == 'bbstheme')
		{
			if (substr($realname,0,12) != 'rb_bbstheme_')
			{
				getLink('reload','parent.','게시판테마 패키지가 아닙니다.','');
			}
		}

		if ($fileExt != 'zip')
		{
			getLink('reload','parent.','패키지는 반드시 zip압축 포맷이어야 합니다.','');
		}

		if (!move_uploaded_file($tmpname,$saveFile))
		{
			getLink('reload','parent.','업로드 파일을 임시 폴더에 저장하지 못했습니다. 서버 쓰기 권한을 확인해 주세요.','');
		}

		require $g['path_core'].'opensrc/unzip/ArchiveExtractor.class.php';
		require $g['path_core'].'function/dir.func.php';
		
		$extractor = new ArchiveExtractor();
		$extractor -> extractArchive($saveFile,$extPath1);
		unlink($saveFile);

		$opendir = opendir($extPath1);
		while(false !== ($file = readdir($opendir)))
		{
			if($file != '.' && $file != '..' && is_file($extPath1.$file.'/name.txt'))
			{
				if(is_file($folder.$subfolder.$file.'/name.txt'))
				{
					$isPack = $file;
					break;
				}
				
				mkdir($folder.$subfolder.$file,0755);
				@chmod($folder.$subfolder.$file,0755);
				DirCopy($extPath1.$file,$folder.$subfolder.$file);				
				$isUpload = is_file($folder.$subfolder.$file.'/name.txt');
				break;
			}
		}
		closedir($opendir);

		DirDelete($extPath);
		mkdir($extPath,0707);
		@chmod($extPath,0707);
		
		if ($isPack)
		{
			getLink('reload','parent.','이미 동일한 폴더명('.$isPack.')의 '.$typeset[$type].' 존재합니다.','');
		}
		if (!$isUpload)
		{
			getLink('reload','parent.','패키지 규격에 맞지 않거나 설치 폴더를 생성할 수 없습니다.','');		
		}
	}
	else {
		getLink('reload','parent.','업로드된 파일을 확인할 수 없습니다. 다시 선택해 주세요.','');
	}



	getLink('reload','parent.','['.$file.'] 패키지가 정상적으로 설치되었습니다.','');
}
?>
