#!/usr/local/bin/perl

##=======================================================================##
## AD-EDIT2 SETUP-CGI  v2.9.8
## (c)2008-2010 NorenzPRO Ltd. TakafumiArai 2010/7/9
##=======================================================================##
use CGI::Carp qw(fatalsToBrowser);

##=====================================================================================##
##設定項目
## 1行目のperlのパスをサーバ環境に合わせて変更して下さい
## FTPにてアップロード後、パーミッションを705または700に設定してください
##=====================================================================================##

##★セキュリティーキー
$pass='adedit2norenzpro';

##=====================================================================================##
##メインルーチン
##=====================================================================================##

##ライブラリ
use strict;
use CGI;
use Encode;
use File::Path;

##このスクリプトの名前
our $cginame = 'setup.cgi';

##tarパッケージの名前
our $TarFile = './adedit2.tar';

##システムディレクトリ
our @FilesDir =(
	'./admin',
	'./admin/emoji',
	'./admin/img',
	'./admin/sys',
	'./admin/sys/bbs',
	'./admin/sys/calender',
	'./admin/sys/gmap',
	'./admin/sys/imgnavi',
	'./admin/sys/listnavi',
	'./admin/sys/mail',
	'./admin/sys/pgedit',
	'./admin/sys/pgedit2',
	'./admin/sys/htedit',
	'./admin/sys/tmpedit',
	'./admin/wysiwyg',
	'./admin/wysiwyg/addons',
	'./admin/wysiwyg/addons/imagelibrary',
	'./admin/wysiwyg/addons/imagelibrary/images',
	'./admin/wysiwyg/images',
	'./admin/wysiwyg/popups',
	'./admin/wysiwyg/scripts',
	'./admin/wysiwyg/styles',
	'./admin/editarea',
	'./admin/editarea/images',
	'./admin/editarea/langs',
	'./admin/editarea/reg_syntax',
	'./admin/jslib',
	'./admin/jslib/greybox',
	'./commons',
	'./icon',
	'./img',
	'./jslib',
	'./jslib/greybox',
	'./mobi',
	'./skin',
	'./uploads',
	);

##CGIファイル
our @FilesExec =(
	'./admin/index.cgi',
	'./admin/adedit.cgi',
	'./admin/admenu.cgi',
	'./admin/admobi.cgi',
	'./admin/adpass.cgi',
	'./admin/adskin.cgi',
	'./admin/adsystem.cgi',
	'./admin/logout.cgi',
	'./admin/menu.cgi',
	'./admin/news.cgi',
	'./admin/search.cgi',
	'./admin/qrcode.cgi',
	'./admin/emoji.pl',
	'./admin/wysiwyg/addons/imagelibrary/config.inc.php',
	'./admin/wysiwyg/addons/imagelibrary/insert_image.php',
	'./admin/wysiwyg/addons/imagelibrary/insert_image.cgi',
	'./admin/wysiwyg/addons/imagelibrary/select_image.php',
	'./commons/news.cgi',
	'./commons/search.cgi',
	'./commons/qrcode.cgi'
	);

##データファイル
our @FilesWR =(
	'./admin/conf.dat',
	'./admin/dir.dat',
	'./admin/menu1.dat',
	'./admin/menu2.dat',
	'./admin/menu3.dat',
	'./admin/menu1.inc',
	'./admin/menu2.inc',
	'./admin/menu3.inc',
	'./commons/menu1.inc',
	'./commons/menu2.inc',
	'./commons/menu3.inc',
	'./admin/mobi.dat',
	'./admin/pass.cgi',
	'./mobi/index.html',
	'./skin/skin.html',
	'./skin/mobi.html',
	'./skin/style.css',
	'./index.shtml'
	);

##動作チェック用テストファイル
our $testDir='./AE2testDir';
our $testFile='./AE2testDir/testFile.html';
our $testTemp='./AE2testDir/testTemp.txt';
our $testCGI='./AE2testDir/testFile.cgi';
our $readCGI='./AE2testDir/readFile.cgi';

##フォームの取得
our %ENV;
our %in;
our @in;
my $query = CGI->new;
*in = $query->Vars();
Encode::from_to(*in, 'shiftjis', 'shiftjis');

##Perlパスの解析
open(ThisCGI,$cginame);
our @ThisCGI=<ThisCGI>;
close(ThisCGI);
$ThisCGI[0] =~ s/\r//g;
$ThisCGI[0] =~ s/\n//g;
our $PerlPath=$ThisCGI[0];

##CGIパーミッションの解析
our @stat = stat($cginame);
our $ExecMode = '0'.substr((sprintf "%03o", $stat[2]), -3);
our $WRMode;
our $DirMode;

##ドメイン名の解析
our $HostName=$ENV{'SERVER_NAME'};
if ($HostName eq '') { $HostName='www.yourdomain.com'; }

##ルートパスの解析
our $AePath;
our $SubDirectory=$ENV{'REQUEST_URI'};
$SubDirectory =~ s/$cginame//g;
$SubDirectory =~ s/\?DirMode=[0-9][0-9][0-9][0-9]\&ExecMode=[0-9][0-9][0-9][0-9]\&WRMode=[0-9][0-9][0-9][0-9]//g;
my @SubPaths=split(/\//,$SubDirectory);
our $LotSubPath=@SubPaths-1;our $si=0;
for (0..$LotSubPath) {
	if ($SubPaths[$si] ne '') { $AePath=$AePath.$SubPaths[$si].'/'; }
	$si++;
}
$AePath=$AePath.'/';
$AePath =~ s/\/\///g;
if ($AePath eq '/') { $SubDirectory=''; }
else { $SubDirectory=$AePath; }

##パスワードファイルの確認
our $passfile = './admin/pass.cgi';
our $passMsg;
our $pass;
if(open(PASSRD,$passfile)) {
	$passMsg='AD-EDIT管理画面のログインパスワードを入力してください';
	my @PASS = <PASSRD>;
	close(PASSRD);
	$pass=$PASS[1];
	$pass =~ s/\r//g;
	$pass =~ s/\n//g;
} else {
	$passMsg='このCGIに記述されているセキュリティーキーを入力してください';
}

##==============メインアクション==============

if ($in{'mode'} eq 'setup') {
	if ($in{'SecureKey'} ne $pass) { &deny; }
	if($in{'inst'} eq 'new') {
		if (-e './admin/adedit.cgi') { &installed; }
		unlink($testFile);
		unlink($testTemp);
		unlink($testCGI);
		unlink($readCGI);
		rmdir($testDir);
		sleep(1);
		&extract;		sleep(5);
		if (-e './skin') {
			print "<div align=center><font style=\"color:blue\">".$TarFile."を解凍しました。</font></div>\n";
			&chmode;		sleep(1);
			&confsave;	sleep(1);
			&datasave;
		} else {
			print "<div align=center><font style=\"color:red\">"
				.$TarFile."の解凍に失敗しました。<br />このファイルを解凍してFTP等にてアップロードし、"
				."手動セットアップを行ってください</font></div></body></html>\n";
		}
	} elsif($in{'inst'} eq 'del') {
		unlink($testFile);
		unlink($testTemp);
		unlink($testCGI);
		unlink($readCGI);
		rmdir($testDir);
		&delete1;	sleep(1);
		&delete2;	sleep(1);
		&delete3;
	}
} else {
	if ($in{'DirMode'} eq '') { $DirMode = '0707'} else { $DirMode=$in{'DirMode'}; }
	if ($in{'WRMode'} eq '') { $WRMode = '0707'} else { $WRMode=$in{'WRMode'}; }
	if ($in{'ExecMode'} eq '') { $ExecMode = $ExecMode; } else { $ExecMode=$in{'ExecMode'}; }
	&serverCheck;
	&setup;
}

exit;

##=====================================================================================##
##サブルーチン
##=====================================================================================##
sub serverCheck {

unlink($testFile);
unlink($testTemp);
unlink($testCGI);
unlink($readCGI);
rmdir($testDir);
sleep(1);

my $htTest = <<"htTest";
<html><head><meta http-equiv="Content-Type" content="text/html; charset=shift_jis"></head>
<body style="margin:0"><b style="color:blue; font-size:12px">HTML\動作\OK</b></body></html>
htTest

my $cgiTest = <<"cgiTest";
$PerlPath
print "Content-type: text/html\\n\\n";
print "<html><head><meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html; charset=shift_jis\\\"></head>\\n";
print "<body style=\\\"margin:0\\\"><b style=\\\"color:blue; font-size:12px\\\">CGI\\動作\\OK</b></body></html>\\n";
cgiTest

my $readTest = <<"readTest";
$PerlPath
open(TestRD,\"testFile.html\");
\@RDLINE=<TestRD>;
close(TestRD);
print "Content-type: text/html\\n\\n";
print \$RDLINE\[0\];
\$RDLINE[1]=\~s/HTML動作/READ動作/g;
print \$RDLINE\[1\];
readTest

mkdir($testDir);
chmod(oct($DirMode),$testDir);
if ((-e $testDir)&&(open(TEST,">$testTemp"))) {
	print TEST "$htTest";
	close(TEST);
	rename($testTemp,$testFile);
	chmod(oct($WRMode),$testFile);
}
if ((-e $testDir)&&(open(TEST,">$testCGI"))) {
	print TEST "$cgiTest";
	close(TEST);
	rename($testTemp,$testCGI);
	chmod(oct($ExecMode),$testCGI);
}
if ((-e $testDir)&&(open(TEST,">$readCGI"))) {
	print TEST "$readTest";
	close(TEST);
	rename($testTemp,$readCGI);
	chmod(oct($ExecMode),$readCGI);
}
sleep(1);

}
##=======================================================================================
sub setup {

my $htSetup;

if (-e $TarFile) {

##sendmailの確認
our $ExistsSendmailA;
our $ExistsSendmailB;
our $ExistsSendmailV;
if (-e "/usr/lib/sendmail") {
	$ExistsSendmailA='<span style="color:blue">○ /usr/lib/sendmail → 利用可能</span>'."\n";
	$ExistsSendmailV='/usr/lib/sendmail';
} else {
	$ExistsSendmailA='<span style="color:red">× /usr/lib/sendmail → 利用不可</span>'."\n";
}
if (-e "/usr/sbin/sendmail"){
	$ExistsSendmailB='<span style="color:blue">○ /usr/sbin/sendmail → 利用可能</span>'."\n";
	$ExistsSendmailV='/usr/sbin/sendmail';
} else {
	$ExistsSendmailB='<span style="color:red">× /usr/sbin/sendmail → 利用不可</span>'."\n";
}
##convertの確認
our $ExistsConvertA;
our $ExistsConvertB;
our $ExistsConvertV;
if (-e "/usr/bin/convert"){
	$ExistsConvertB='<span style="color:blue">○ /usr/bin/convert → 利用可能</span>'."\n";
	$ExistsConvertV='/usr/bin/convert';
} else {
	$ExistsConvertB='<span style="color:red">× /usr/bin/convert → 利用不可</span>'."\n";
}
if (-e "/usr/local/bin/convert") {
	$ExistsConvertA='<span style="color:blue">○ /usr/local/bin/convert → 利用可能</span>'."\n";
	$ExistsConvertV='/usr/local/bin/convert';
} else {
	$ExistsConvertA='<span style="color:red">× /usr/local/bin/convert → 利用不可</span>'."\n";
}
##インストール確認
our $instchk1;
our $instchk2;
if (-e './admin/conf.dat') {
	$instchk1='';
	$instchk2=' checked';
} else {
	$instchk1=' checked';
	$instchk2='';
}

##処理画面
$htSetup = <<"htSetup";
<html><head>
<title>AD-EDITセットアップ</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<script type="text/javascript"><!--
	function swMode() {
		var xDirIndex=document.admin.DirMode.selectedIndex;
		var xExecIndex=document.admin.ExecMode.selectedIndex;
		var xWRIndex=document.admin.WRMode.selectedIndex;
		var xDirMode=document.admin.DirMode.options[xDirIndex].text;
		var xExecMode=document.admin.ExecMode.options[xExecIndex].text;
		var xWRMode=document.admin.WRMode.options[xWRIndex].text;
		var TestUrl='$cginame?DirMode='+xDirMode+'&ExecMode='+xExecMode+'&WRMode='+xWRMode;
		top.location.href=TestUrl;
	}
--></script>
</head>
<body style="font-size:12px;line-height:130%">
<h3 align="center">AD-EDITセットアップ</h3>
<div align="center">
「AD-EDIT」のセットアップを行います。お使いのサーバーに合わせて設定を行ってください。
</div>
<table border=0 cellspacing=0 cellpadding=5 align="center" style="font-size:12px;line-height:130%">
<tr><td>
<form method="post" action="$cginame" name="admin">
<b>セットアップ方法</b><br>
<br>
　<input type="radio" name="inst" value="new"$instchk1>新規セットアップ　
<input type="radio" name="inst" value="del"$instchk2>アンインストール<br>
<br>
<b>パーミッション設定</b><br>
<br>
　ディレクトリ 
<select name="DirMode" onChange="javascript:swMode();">
<option value="$DirMode" selected>$DirMode</option>
<option value="0777">0777</option>
<option value="0707">0707</option>
<option value="0705">0705</option>
<option value="0700">0700</option>
<option value="0777">0777 </option>
<option value="0755">0755</option>
<option value="0644">0644</option>
</select>　
実行ファイル 
<select name="ExecMode" onChange="javascript:swMode();">
<option value="$ExecMode" selected>$ExecMode</option>
<option value="0777">0777</option>
<option value="0707">0707</option>
<option value="0755">0755</option>
<option value="0705">0705</option>
<option value="0700">0700</option>
</select>　
ログファイル 
<select name="WRMode" onChange="javascript:swMode();">
<option value="$WRMode" selected>$WRMode</option>
<option value="0777">0777</option>
<option value="0707">0707</option>
<option value="0666">0666</option>
<option value="0606">0606</option>
<option value="0644">0644</option>
<option value="0604">0604</option>
<option value="0600">0600</option>
</select><br>
<br>
　▼３つのウィンドウすべて 「動作OK」 となるよう設定してください</span><br>
　<iframe src="$testFile" width="120" height="20" scrolling="no" frameborder=1></iframe>
<iframe src="$testCGI" width="120" height="20" scrolling="no" frameborder=1></iframe>
<iframe src="$readCGI" width="120" height="20" scrolling="no" frameborder=1></iframe><br>
　<span style="color:blue">※「パーミッション設定」とは、ファイルの読み書きや実行権限の設定です</span><br>
　※お使いのレンタルサーバーの「ユーザーサポート」や「FAQ」などに記述されています<br>
　　<a href="http://adedit.norenz.net/install/index.html#kiji0050" target="_blank">国内主要レンタルサーバー別の設定一覧</a><br>
　<br>
<b>設置URL</b> http:// www.ドメイン名.com / ルートパス /<br>
<br>
　 http:// <input type="text" name="HostName" value="$HostName" size="40" style="ime-mode:disabled;"> / <input type="text" name="SubDirectory" value="$SubDirectory" size="20" style="ime-mode:disabled;"> /<br>
　<span style="color:red">※日本語ドメインの場合は、xn- から始まるドメイン名を入力してください</span><br>
<br>
<b>Perlのパス</b><br>
<br>
　 $PerlPath <br>
　<span style="color:blue">※このCGIで使用しているPerlのパスをこのまま利用します</span><br>
<br>
<b>sendamilのパス</b><br>
<br>
　<input type="text" name="PathSendmail" value="$ExistsSendmailV" size="30" style="ime-mode:disabled;"><br>
　※メール送信に必要なsendamilのパスです<br>
　※メールフォームを利用する場合に、この設定を必要に応じて変\更して下さい<br>
　※この設定は、お使いのレンタルサーバーの「サポート」や「FAQ」といったページに記述されています<br>
　※ 一般的なsendmailのパスは、以下の通りです<br>
　　 $ExistsSendmailA 　 $ExistsSendmailB <br>
<br>
<b>ImageMagick [convert] のパス</b><br>
<br>
　<input type="text" name="PathConvert" value="$ExistsConvertV" size="30" style="ime-mode:disabled;"><br>
　※画像アップロードの際、リサイズ\機\能\を利用する場合に設定して下さい<br>
　※この設定は、お使いのレンタルサーバーの「サポート」や「FAQ」といったページに記述されています<br>
　※ 一般的なconvertのパスは、以下の通りです<br>
　　 $ExistsConvertA 　 $ExistsConvertB <br>
<br>
<b>GoogleMapAPIキー</b><br>
<br>
　<input type="text" name="GmapAPIkey" value="ABQIAAAA7ERUOpWgHsoP_9IB8cpWjxRuBNSW739cNqg1eotYypUGfy3HtRTBba77wS9N26vCLPOUEjJpUTd20w" size="120" style="ime-mode:disabled;"><br>
　※AD-EDITで使用するGoogleMapの表\示に必要な利用キーです<br>
　※ <a href="http://code.google.com/intl/ja/apis/maps/" target="_blank">http://code.google.com/intl/ja/apis/maps/</a>にてAPI利用Keyを取得してくだい<br>
　※ 後から管理画面のサーバー設定にて設定できます<br>
<br>
<b>セキュリティーキー</b><br>
<br>
　<input type="text" name="SecureKey" value="" size="30" style="ime-mode:disabled;"><br>
　<span style="color:red">※$passMsg</span><br>
<br>
</div><br>
<div align="center">
<input type="submit" name="submit" value="セットアップ開始">
<input type="hidden" name="PathPerl" value="$PerlPath">
<input type="hidden" name="mode" value="setup">
</div>
</form>
</td></tr>
</table>
</body></html>
htSetup

} else {

##処理画面
$htSetup = <<"htSetup";
<html><head>
<title>AD-EDITセットアップ</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body style="font-size:12px;line-height:130%">
<h3 align="center">$TarFile がありません</h3>
<p align="center">FTPにて $TarFile をアップロードしてください</p>
</body></html>
htSetup

}
print "Content-type: text/html\n\n";
print $htSetup;

}
##=======================================================================================
sub extract {

print "Content-type: text/html\n\n";

##処理画面出力
my $htSETUP = <<"htSETUP";
<html><head>
<title>AD-EDITセットアップ</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<script type="text/javascript"><!--
var speed = 1;
var move = 100;
var x = 0;
var y = 0;
var nx = 0;
var ny = 0;
function scroll(){
	window.scrollBy(0, move);
	var rep = setTimeout("scroll()", speed);
	if(document.all){
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	} else if(document.layers || document.getElementById) {
		x = pageXOffset;
		y = pageYOffset;
	}
	nx = x;
	ny = y;
}
// --></script>
</head>
<body style="font-size:12px;line-height:130%" onLoad="javascript:scroll();">
<h3 align="center">AD-EDITセットアップ</h3>
<h5 align="center">$TarFile を展開中</h5>
htSETUP
print "$htSETUP\n\n";

##古いバージョンで使用していたファイルの削除
unlink('./init');
unlink('./admin/index.html');

##Tarファイルの解凍
system("tar -vxf $TarFile");

}
##=======================================================================================
sub chmode {

my $i;
print "<h5 align=\"center\">パーミッションを設定中</h5>\n";

##フォーム取得処理
if ($in{'DirMode'} eq '') { $in{'DirMode'} ='0707'; }
if ($in{'ExecMode'} eq '') { $in{'ExecMode'} ='0707'; }
if ($in{'WRMode'} eq '') { $in{'WRMode'} ='0707'; }
$DirMode=$in{'DirMode'};
$ExecMode=$in{'ExecMode'};
$WRMode=$in{'WRMode'};

##パーミッション設定[ディレクトリ]
my $FilesDirLot=@FilesDir-1;$i=0;
for (0..$FilesDirLot) {
	if (chmod(oct($DirMode),$FilesDir[$i])) {
		print "<div align=center><font style=\"color:blue\">"
			.$FilesDir[$i]."のパーミッションを".$DirMode."に設定しました</font></div>\n";
	} else {
		print "<div align=center><font style=\"color:red\">"
			.$FilesDir[$i]."のパーミッション設定不可、後ほどFTP等で".$DirMode."に設定してください</font></div>\n";
	}
	$i++;
}

##パーミッション設定[実行ファイル
my $FilesExecLot=@FilesExec-1;$i=0;
for (0..$FilesExecLot) {
	if (chmod(oct($ExecMode),$FilesExec[$i])) {
		print "<div align=center><font style=\"color:blue\">"
			.$FilesExec[$i]."のパーミッションを".$ExecMode."に設定しました</font></div>\n";
	} else {
		print "<div align=center><font style=\"color:red\">"
			.$FilesExec[$i]."のパーミッション設定不可、後ほどFTP等で".$DirMode."に設定してください</font></div>\n";
	}
	$i++;
}

##パーミッション設定[データファイル]
my $FilesWRLot=@FilesWR-1;$i=0;
for (0..$FilesWRLot) {
	if (chmod(oct($WRMode),$FilesWR[$i])) {
		print "<div align=center><font style=\"color:blue\">"
			.$FilesWR[$i]."パーミッションを".$WRMode."に設定しました</font></div>\n";
	} else {
		print "<div align=center><font style=\"color:red\">"
			.$FilesWR[$i]."パーミッション設定不可、後ほどFTP等で".$DirMode."に設定してください</font></div>\n";
	}
	$i++;
}

#★絵文字追加[v2.9.7]
if (-e "./admin/emoji") {
	chmod(oct($DirMode),'./admin/emoji');
	system('cp','-r','-p','./admin/emoji','./emoji');
	sleep(2);
	rmtree('./admin/emoji','./emoji');
}

}
##=======================================================================================
sub confsave {

my @CONF;
my @CONFWR;

print "<h5 align=\"center\">設定ファイルを\更\新中</h5>\n";

##設定ファイルの更新
my $conffile = './admin/conf.dat';
open(CONFRD,$conffile);
@CONF = <CONFRD>;
close(CONFRD);
$CONFWR[0] = "$in{'DirMode'}\n"; 
$CONFWR[1] = "$in{'ExecMode'}\n";
$CONFWR[2] = "$in{'WRMode'}\n";
$CONFWR[3] = "$in{'HostName'}\n";
$CONFWR[4] = "$in{'PathPerl'}\n";
$CONFWR[5] = $CONF[5];
$CONFWR[6] = $CONF[6];
$CONFWR[7] = "$in{'PathSendmail'}\n";
$CONFWR[8] = "$in{'GmapAPIkey'}\n";
$CONFWR[9] = $CONF[9];
$CONFWR[10] = "$in{'SubDirectory'}\n";
$CONFWR[11] = $CONF[11];
$CONFWR[12] = "$in{'PathConvert'}\n";

my $tmpfile = './admin/'."$$\.tmp";
if (!open(TMP,">$tmpfile")) {
	print "<div align=center><font style=\"color:red\">設定ファイルの\更\新に失敗しました<br>"
		."パーミッション設定が間違っている可\能\性があります<br>"
		."もう一度アンインストールしてセットアップしなおしてみて下さい</font></div>";
}
print TMP @CONFWR;
close(TMP);
chmod(oct($WRMode),$tmpfile);
rename($tmpfile,$conffile);

}
##=======================================================================================
sub datasave {

my @RDDATA;
my @WRDATA;

print "<h5 align=\"center\">システムファイルを適正化中</h5>\n";

my $FilesExecLot=@FilesExec-1;my $i=0;
for (0..$FilesExecLot) {
	#CGIファイル読み込み
	@RDDATA=();
	@WRDATA=();
	open(DATARD,$FilesExec[$i]);
	@RDDATA = <DATARD>;
	close(DATARD);
	
	#Perlのパスの変更
	if ($FilesExec[$i] =~ /\.cgi/) { $RDDATA[0]=$in{'PathPerl'}."\n"; }
	my $LotRDDATA=@RDDATA-1;my $ci=0;
	for (0..$LotRDDATA) {
		$RDDATA[$ci] =~ s/\r\n/\n/g;
		$RDDATA[$ci] =~ s/\r/\n/g;
		push(@WRDATA,$RDDATA[$ci]);
		$ci++;
	}
	#CGIファイルの再保存
	my $tmpfile = './admin/'."$$\.tmp";
	if (open(TMP,">$tmpfile")) {
		if ($FilesExec[$i] =~ /\.cgi/) { 
			print "<div align=center><font style=\"color:blue\">".$FilesExec[$i]."のPerlのパスを変更しました</font></div>";
		}
	} else {
		print "<div align=center><font style=\"color:red\">".$FilesExec[$i]."のPerlのパスの変更に失敗しました</font></div>";
	}
	print TMP @WRDATA;
	close(TMP);
	chmod(oct($ExecMode),$tmpfile);
	rename($tmpfile,$FilesExec[$_]);
	$i++;
}

##★パーミッション調整
my $chD;my @chF;my $chi;my $chP;
$chD='./img/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./skin/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./mobi/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./icon/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./emoji/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}

$chD='./jslib/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($DirMode),$chP); $chi++;}
$chD='./jslib/greybox/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/jslib/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($DirMode),$chP); $chi++;}
$chD='./admin/jslib/greybox/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}

$chD='./uploads/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}

$chD='./admin/img/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}

$chD='./admin/sys/bbs/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/sys/calender/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/sys/gmap/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/sys/htedit/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/sys/imgnavi/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/sys/listnavi/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/sys/mail/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/sys/pgedit/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/sys/pgedit2/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/sys/tmpedit/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}

$chD='./admin/wysiwyg/addons/imagelibrary/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/wysiwyg/addons/imagelibrary/images/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/wysiwyg/images/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/wysiwyg/popups/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/wysiwyg/scripts/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/wysiwyg/styles/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}

$chD='./admin/editarea/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/editarea/images/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/editarea/langs/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}
$chD='./admin/editarea/reg_syntax/';
@chF=();$chi=0;@chF=&GetFilelist($chD,0,0);
foreach (@chF) { $chP=$chD.$chF[$chi].''; chmod(oct($WRMode),$chP); $chi++;}

chmod(oct($DirMode),'./admin/wysiwyg/images');
chmod(oct($DirMode),'./admin/wysiwyg/addons/imagelibrary/images');
chmod(oct($DirMode),'./admin/editarea/images');
chmod(oct($ExecMode),'./admin/wysiwyg/addons/imagelibrary/config.inc.php',);
chmod(oct($ExecMode),'./admin/wysiwyg/addons/imagelibrary/insert_image.php');
chmod(oct($ExecMode),'./admin/wysiwyg/addons/imagelibrary/insert_image.cgi');
chmod(oct($ExecMode),'./admin/wysiwyg/addons/imagelibrary/select_image.php');

print "<h5 align=\"center\">以上でセットアップ処理完了です</h5>\n";
print "<p align=\"center\"><a href=\"./admin/index.cgi\">[管理画面へ進む]</a></p>\n";
print "</body></html>\n";

}
##=======================================================================================
sub delete1 {

print "Content-type: text/html\n\n";

##処理画面出力
my $htSETUP = <<"htSETUP";
<html><head>
<title>AD-EDITセットアップ</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body style="font-size:12px;line-height:130%">
<h3 align="center">AD-EDITアンインストール</h3>
<h5 align="center">AD-EDIT関連フォルダを削除中</h5>
htSETUP
print $htSETUP;

}
##=======================================================================================
sub delete2 {

print "<h5 align=\"center\">コンテンツフォルダを削除しています</h5>\n";

##dir.datに登録されている関連フォルダの削除
my $dirfile = './admin/dir.dat';
if (-e $dirfile) {
	open(DIRRD,"$dirfile");
	my @DIR = <DIRRD>;
	close(DIRRD);
	my $LotDIR=@DIR-1;my $di=0;
	my @Directories;
	foreach(0..$LotDIR) {
		my ($ContentDir,$EditorType)=split(/\,/,$DIR[$di]);
		push(@Directories,$ContentDir);
		$di++;
	}
	my $LotDIR=@DIR-1;my $di=0;
	my $removeDir;
	for (0..$LotDIR) {
		$removeDir='./'.$Directories[$di];
		rmtree($removeDir);
		sleep(1);
		if (-e $removeDir) {
			print "<div align=center><font style=\"color:red\">".$removeDir."の削除に失敗しました</font></div>";
		} else {
			print "<div align=center><font style=\"color:blue\">".$removeDir."を削除しました</font></div>";
		}
		$di++;
	}
}

}
##=======================================================================================
sub delete3 {

print "<h5 align=\"center\">システムフォルダを削除しています</h5>\n";

##システムフォルダの削除
my $AdminDir='./admin';
if (-e $AdminDir) {
	##./adminの削除
	rmtree($AdminDir);
	sleep(5);
	if (-e $AdminDir) {
		print "<div align=center><font style=\"color:red\">".$AdminDir."の削除に失敗しました FTP等で削除してください</font></div>";
	} else {
		print "<div align=center><font style=\"color:blue\">".$AdminDir."を削除しました</font></div>";
	}
	##./iconの削除
	my $IconDir='./icon';
	rmtree($IconDir);
	sleep(2);
	if (-e $IconDir) {
		print "<div align=center><font style=\"color:red\">".$IconDir."の削除に失敗しました FTP等で削除してください</font></div>";
	} else {
		print "<div align=center><font style=\"color:blue\">".$IconDir."を削除しました</font></div>";
	}
	##./imgの削除
	my $ImageDir='./img';
	rmtree($ImageDir);
	sleep(2);
	if (-e $ImageDir) {
		print "<div align=center><font style=\"color:red\">".$ImageDir."の削除に失敗しました FTP等で削除してください</font></div>";
	} else {
		print "<div align=center><font style=\"color:blue\">".$ImageDir."を削除しました</font></div>";
	}
	##./mobiの削除
	my $MobiDir='./mobi';
	rmtree($MobiDir);
	sleep(2);
	if (-e $MobiDir) {
		print "<div align=center><font style=\"color:red\">".$MobiDir."の削除に失敗しました FTP等で削除してください</font></div>";
	} else {
		print "<div align=center><font style=\"color:blue\">".$MobiDir."を削除しました</font></div>";
	}
	##./skinの削除
	my $SkinDir='./skin';
	rmtree($SkinDir);
	sleep(1);
	if (-e $SkinDir) {
		print "<div align=center><font style=\"color:red\">".$SkinDir."の削除に失敗しました FTP等で削除してください</font></div>";
	} else {
		print "<div align=center><font style=\"color:blue\">".$SkinDir."を削除しました</font></div>";
	}
	##./uploadsの削除
	my $UploadDir='./uploads';
	rmtree($UploadDir);
	sleep(2);
	if (-e $UploadDir) {
		print "<div align=center><font style=\"color:red\">".$UploadDir."の削除に失敗しました FTP等で削除してください</font></div>";
	} else {
		print "<div align=center><font style=\"color:blue\">".$UploadDir."を削除しました</font></div>";
	}
	##./commonsの削除
	my $UploadDir='./commons';
	rmtree($UploadDir);
	sleep(2);
	if (-e $UploadDir) {
		print "<div align=center><font style=\"color:red\">".$UploadDir."の削除に失敗しました FTP等で削除してください</font></div>";
	} else {
		print "<div align=center><font style=\"color:blue\">".$UploadDir."を削除しました</font></div>";
	}
	##./jslibの削除
	my $UploadDir='./jslib';
	rmtree($UploadDir);
	sleep(2);
	if (-e $UploadDir) {
		print "<div align=center><font style=\"color:red\">".$UploadDir."の削除に失敗しました FTP等で削除してください</font></div>";
	} else {
		print "<div align=center><font style=\"color:blue\">".$UploadDir."を削除しました</font></div>";
	}
	##./emojiの削除
	my $UploadDir='./emoji';
	rmtree($UploadDir);
	sleep(2);
	if (-e $UploadDir) {
		print "<div align=center><font style=\"color:red\">".$UploadDir."の削除に失敗しました FTP等で削除してください</font></div>";
	} else {
		print "<div align=center><font style=\"color:blue\">".$UploadDir."を削除しました</font></div>";
	}
	##./index.shtmlの削除
	my $DelFile='./index.shtml';
	unlink($DelFile);
	sleep(1);
	if (-e $DelFile) {
		print "<div align=center><font style=\"color:red\">".$DelFile."の削除に失敗しました FTP等で削除してください</font></div>";
	} else {
		print "<div align=center><font style=\"color:blue\">".$DelFile."を削除しました</font></div>";
	}
} else {
	print "<h5 align=\"center\" style=\"color:red\">このサーバーにAD-EDIT2は存在しません</h5>\n";
}


print "<h5 align=\"center\">以上でアンインストール処理完了です</h5>\n";
print "<p align=\"center\">不要なファイルやフォルダをFTPにて削除してください</p>\n";
print "</body></html>\n";

}
##=======================================================================================
sub deny {

##処理画面出力
my $htSETUP = <<"htSETUP";
<html><head>
<title>AD-EDITセットアップ</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body style="font-size:12px;line-height:130%">
<h3 align="center">AD-EDITセットアップ</h3>
<h5 align="center" style="color:red">セキュリティーキーが違います</h5>
htSETUP

print "Content-type: text/html\n\n";
print $htSETUP;

exit;
}
##=======================================================================================
sub installed {

##処理画面出力
my $htSETUP = <<"htSETUP";
<html><head>
<title>AD-EDITセットアップ</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body style="font-size:12px;line-height:130%">
<h3 align="center">AD-EDITセットアップ</h3>
<h5 align="center" style="color:red">すでにAD-EDITがインストールされています<br>
アンインストールしてから再インストールしてください</h5>
htSETUP

print "Content-type: text/html\n\n";
print $htSETUP;

exit;
}
##=======================================================================================
sub GetFilelist {

# ファイルリストの取得 
# &GetFilelist(ディレクトリ, 拡張子, スイッチ);
# 返り値：ファイル一覧（ディレクトリが開けない場合は「false」） 
# ディレクトリは相対パスで指定（絶対パスは不可） 
# 拡張子は「/（スラッシュ）」で区切ることで複数指定可 
# 拡張子に「.[*]」を指定すると全てのファイルを返す 
# 拡張子に0を指定する（&GetFilelist(ディレクトリ, 0, スイッチ);）とディレクトリ一覧を返す 
# スイッチは0か1を指定。1を指定するとファイル名を全て小文字に変換して検索。
# 0の場合は大文字と小文字が区別される 


# 引数の取得、変数の準備
my ($dir, $extension, $swich) = @_;
my ($temp, $file, $e, $n, @filelist);
my $i = 0;

# 複数指定の拡張子を分割
my @ext = split(/\//, $extension);

# ディレクトリを開く
opendir (DIR , $dir) || return 0;

# ディレクトリにあるファイル等を１つずつ抽出
while ($file = readdir DIR) {
	# ゴミをはじく
	if ($file =~ /^\.{1,2}$/) {
		next;
	} else {
		# 大文字小文字の判定
		if ($swich == 1) {
			$temp = lc($file);
			foreach (@ext) {
				$_ = lc($_);
			}
		} else {
			 $temp = $file;
		}
		# ファイルが指定拡張子と合致するかを拡張子毎にチェック
		foreach $e (@ext) {
			# 拡張子が指定されていて且つ、ワイルドカードではない
			if ($e && $e ne ".[*]") {
				# 拡張子以外の文字列に引っかからないための措置
				if (index($temp, $e, length($temp) - length($e)) != -1) {
					$filelist[$i] = $file;
					$i++;
					# ヒットしたら次のファイルへ
					last;
				} else {
					# ヒットしないため別の拡張子へ
					next;
				}
			} else {
					# ワイルドカードを指定された時
					if ($e eq ".[*]") {
						if ($file =~/\./) {
							$filelist[$i] = $file;
							$i++;
							last;
						}
					} else {
						# 拡張子の指定がない時
						$filelist[$i] = $file;
						$i++;
						last;
					}
			}
		}
	}
}

closedir(DIR) ;

# 結果としてファイル一覧を返す
return @filelist;

}
##=======================================================================================
