#!perl -w
# +-------------------------------------------------------------------------+
# | ─цхэЄы№ьхэёъшщ эрсюЁ Web-ЁрчЁрсюЄўшър                                   |
# | ┬хЁёш : ─хэтхЁ-2 2006-10-04                                             |
# +-------------------------------------------------------------------------+
# | Copyright (C) 2001-2004 ─ьшЄЁшщ ╩юЄхЁют.                                |
# +-------------------------------------------------------------------------+
# | ─рээ√щ Їрщы  ты хЄё  ўрёЄ№■ ъюьяыхъёр яЁюуЁрьь "─хэтхЁ-2". ┬√ эх ьюцхЄх |
# | шёяюы№чютрЄ№  хую т ъюььхЁўхёъшї  Ўхы ї.  ═шъръшх фЁєушх юуЁрэшўхэш  эх |
# | эръырф√тр■Єё .  ┼ёыш т√ їюЄшЄх тэхёЄш шчьхэхэш  т шёїюфэ√щ ъюф,  ртЄюЁ√ |
# | сєфєЄ Ёрф√ яюыєўшЄ№ юЄ трё ъюььхэЄрЁшш ш чрьхўрэш . ╧Ёш Єэющ ЁрсюЄ√!    |
# +-------------------------------------------------------------------------+
# | ─юьр°э   ёЄЁрэшЎр: http://denwer.ru                                     |
# | ╩юэЄръЄ√: http://forum.dklab.ru/denwer                                  |
# +-------------------------------------------------------------------------+
package Starters::Hosts;
BEGIN { unshift @INC, "../_lib"; }

use Tools;
use Installer;
use ParseHosts;
use VhostTemplate;
use StartManager;
use Starters_Conf;

# Path to hosts file.
my $hostsPath=getHostsPath();

# Read hosts.
my $h=readBinFile($hostsPath);

# First delete hosts which was added before.
# We need it in case of doubled script running.
my %log=readHostsLog();

my $basedir     = $CNF{apache_dir};
my $httpd_conf  = "$basedir/conf/httpd.conf";

StartManager::action 
	$ARGV[0],
	PATH => [
	],
	start => sub {
		###
		### START.
		###
		print "Обновляем $hostsPath...\n";
		chmod(0666, $hostsPath);

		# Check if we running under Administrator.
		if(!open(local *F, ">>$hostsPath")) {
			print "\n";
			message qq{
				Внимание! Для работы системы виртуальных хостов вы должны 
				находиться в режиме Администратора. Сейчас у вас нет необходимых
				привилегий, поэтому работать будет только localhost.
			
				Эта ошибка также может возникнуть в случае, если файл
				$hostsPath имеет атрибут "только чтение".
				Вы должны снять этот атрибут для продолжения работы.
			};
			waitEnter();
			return;
		}

		if(scalar(keys %log)) {
			print "  Откат предыдущих изменений... ";
			my %del=deleteHosts($h,%log);
			writeHostsLog(); # чистим журнал
			print "отменено хостов: ".scalar(keys %del)."\n";
		}

		# Add hosts from /home.
		my %dom = VhostTemplate::getAllVHosts_forHosts($httpd_conf);
		my %added = insertHosts($h,%dom);
#		warn join(", ", keys %added);

		# Add really added hosts to log.
		writeHostsLog(%added);

		# Save hosts.
		writeBinFile($hostsPath,$h);

		print "  Добавлено хостов: ".scalar(keys %added)."\n";
	},
	stop => sub {
		###
		### STOP.
		###
		print "Восстанавливаем $hostsPath...\n";

		my %del=deleteHosts($h,%log);
		writeHostsLog(); # clear log

		# Save hosts.
		if(eval { writeBinFile($hostsPath,$h); 1 }) {
			print "  Готово. Отключено хостов: ".scalar(keys %del)."\n";
		} else {
			print "  Недостаточно привилегий, пропущено.\n";
		}

	},
;

return 1 if caller;