#!/usr/bin/perl -wT

use DBI();
use CGI qw(:standard);
use CGI::Session;
use CGI::Session::Driver::mysql;
#use CGIBook::Error;

use FileHandle;
my $server = "www.ictprovision.com";
my $query = new CGI;
$query->import_names('R');
my $cmd = ($R::act);
my $qs = $ENV{QUERY_STRING};
my $host = "localhost";
my $db = "supportdb";
my $dbu = "www-data";
my $dpw = "999or666";
#my $unam;
my $Pprofile; my $Sprofile;
my $dbh = DBI->connect("DBI:mysql:database=$db;host=$host", "$dbu", "$dpw", {'RaiseError' => 1});

my $session = new CGI::Session("driver:mysql", undef, { Handle => $dbh, TableName => "sessions" } );

if ( $session->param("~logged-in") ) {
	$Pprofile = $session->param("~Pprofile");
	$Sprofile = $session->param("~Sprofile");
	
	if ( ( $Pprofile->{role} eq '1' ) or ( $Pprofile->{role} eq '2' ) ) {
		setdets();
		print "Content-type: text/html\n\n";
#		if ( $cmd eq 'form' ) {
			print_html();
#		} else {
#			adduser();
#		}
	} else {
		print $query->redirect( -url => "http://$server/dbases/dashboard.cgi?act=dash" );
	}	
} else {
	print $query->redirect( -url => "http://$server/login.cgi?$qs" );
}

sub setdets {
	if ( $cmd eq 'form' ) {
	
		my $j = jstring();
	
		my $fh = FileHandle->new(">../SpryAssets/Usr.js");
		if ( defined $fh ) {
			print $fh "$j\n";
			$fh->close;
		} else {
			error( $query, "Ooops... Can't create dynamic Javascript" );
		}
		
	} elsif ( $cmd eq 'insertU' ) {
		my $sth = $dbh->prepare( "insert into users (username,forename,surname,clear,password,email,tel,fax,mob,school,role) values(?,?,?,?,encrypt(?),?,?,?,?,?,?)" );
		unless ( $sth->execute($R::unam,$R::fnam,$R::snam,$R::pass,$R::pass,$R::emale,$R::tel,$R::fax,$R::mob,$Sprofile->{uid},$R::typ) ) {
			error( $query, "Ooops..." );
		}
	
		print $query->redirect( -url => "http://$server/dbases/dashboard.cgi?act=dash" );
	}
}

sub jstring {

	my $j2 = '[';

#Create first part of the javascript (static).
	my $j1 = 'var arr;
var a;
var b;
var c;
var d;
function setusr( form )
{
	arr = ';

#Create third part of the javascript (static).
my $j3 = qq^	a = form.fnam.value;
	b = form.snam.value;
	c = "";
	d = 0;
	form.unam.value = rec(arr, a.substring(0,1) + b);
}
function rec(arr,val) {
	if(indexInArray(arr,val)>-1){
		c = "";
		d = d + 1;
		c = c + d;
		rec(arr, a.substring(0,1) + b + d);
	}
	return a.substring(0,1) + b + c;
}
function indexInArray(arr,val){
	for(var i=0;i<arr.length;i++) if(arr[i]==val) return i;
	return -1;
}^;

#Create middle part of the javascript (dynamic).
	my $sth = $dbh->prepare( "select username from users" );
	unless ( $sth->execute() ) {
		error( $query, "Ooops..." );
	}
	my $array_ref = $sth->fetchall_arrayref();
		
	foreach (@$array_ref) {
		$j2 = $j2 . qq^"$_->[0]",^;
	}
	$j2 = $j2 . qq^"dummy"]
^;
	
	return ($j1 . $j2 . $j3);
}

sub dummysub {
	$R::act = $R::act; $R::tel = $R::tel; $R::fax = $R::fax; $R::mob = $R::mob; $R::typ = $R::typ;
	$R::unam = $R::unam; $R::fnam = $R::fnam; $R::snam = $R::snam; $R::pass = $R::pass; $R::emale = $R::emale;	
}

sub print_html{

print <<END;

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Add User</title>
<script src="../SpryAssets/SpryMenuBar.js" type="text/javascript"></script>
<script src="../SpryAssets/SpryValidationPassword.js" type="text/javascript"></script>
<script src="../SpryAssets/SpryValidationConfirm.js" type="text/javascript"></script>
<script src="../SpryAssets/SpryValidationTextField.js" type="text/javascript"></script>
<script src="../SpryAssets/SpryValidationSelect.js" type="text/javascript"></script>
<script src="../SpryAssets/Usr.js" type="text/javascript"></script>
<link href="../SpryAssets/SpryMenuBarHorizontal.css" rel="stylesheet" type="text/css" />
<link href="../SpryAssets/SpryValidationPassword.css" rel="stylesheet" type="text/css" />
<link href="../SpryAssets/SpryValidationConfirm.css" rel="stylesheet" type="text/css" />
<link href="../SpryAssets/SpryValidationTextField.css" rel="stylesheet" type="text/css" />
<link href="../SpryAssets/SpryValidationSelect.css" rel="stylesheet" type="text/css" />
<link href="../ict.css" rel="stylesheet" type="text/css" />
</head>

<body>
<!--[if IE]> <div id="IEroot"> <![endif]-->
<div id="container">
	<div id="banner" title="This site is best viewed with Mozilla Firefox or equivalent.">
		<ul id="ict_menu" class="MenuBarHorizontal">
		<li><a href="../index.htm">Home</a></li>
		<li><a href="../services.htm">Services</a></li>
		<li><a href="dashboard.cgi?act=dash">Dashboard</a></li>
		<li><a href="issues.cgi?act=issuesl">&nbsp;&nbsp;&nbsp;&nbsp;Issues</a></li>
		<li><a href="../links.htm">&nbsp;&nbsp;&nbsp;Links</a></li>
		<li><a href="../contact.htm">Contact Us</a></li>
  		</ul>
	</div>
	<div id="addrcont">
		<div id="left_addr">
			<p>ICT Provision Ltd</p>
			<p>28 Dewberry Fields</p>
			<p>Up Holland</p>
			<p>Skelmersdale</p>
			<p>Lancashire</p>
			<p>WN8 0BQ </p>
		</div>
		<div id="cent_addr">Add New User</div>
		<div id="right_addr">
			<p>Tel: 01695 622503</p>
        		<p>Mob: 07788 832584</p>
        		<p>Fax: 01695 624752</p>
        		<p>&nbsp;</p>
        		<p>www.ictprovision.com</p>
        		<p>info\@ictprovision.com</p>
		</div>
	</div>

<form id="uform" action="adduser.cgi?act=insertU" method="post" name="uform">
	<div id=formL>
	Required Information
		<fieldset title="These details are required">
    		<legend>User Information</legend>
			<label for="fnam">Forename</label>
			<input name="fnam" id="fnam" type="text" class="input-box" size=22 onmouseout="setusr(this.form)" /><br>
			<label for="snam">Surname</label>
			<input name="snam" id="snam" type="text" class="input-box" size=22 onmouseout="setusr(this.form)" /><br>
			<label for="unam">Username</label>
			<input name="unam" id="unam" type="text" class="input-box" size=22 readonly="readonly" /><br>
			<span id="sprypassword1">
				<label for="pass">Password</label>
				<input type="password" name="pass" id="pass" class="input-box" /><br>
				<span class="passwordRequiredMsg">A value is required.</span>
        		<span class="passwordMinCharsMsg">Minimum number of characters not met.</span>
        		<span class="passwordMaxCharsMsg">Exceeded maximum number of characters.</span>
        		<span class="passwordInvalidStrengthMsg">The password doesn't meet the specified strength.</span>
			</span>
			
			<span id="spryconfirm1">
				<label for="conf">Confirm password</label>
				<input type="password" name="conf" id="conf" class="input-box" />
				<span class="confirmRequiredMsg">A value is required.</span>
				<span class="confirmInvalidMsg">The values don't match.</span>
			</span>
			
			<span id="spryselect1">
				<label for="typ">User Role</label>
				<select name="typ" id="typ" class="select">
		    		<option value="2">Coordinator</option>
		    		<option value="3" selected="selected">User</option>
		    		<option value="4">Guest</option>
				</select>
				<span class="selectRequiredMsg">Please select an item.</span>
			</span>
			<br><br>
		</fieldset>
	</div>

	<div id=formR>
		Optional Information
		<fieldset title="These details are optional">
			<legend>Contact Details</legend>
				<span id="sprytextfield1">
					<label for="emale">Email</label>
					<input type="text" name="emale" id="emale" size=35 class="input-box" />
				<span class="textfieldInvalidFormatMsg">Invalid format.</span>
			</span>
			<br>
			<span id="sprytextfield2">
				<label for="tel">Tel</label>
				<input type="text" name="tel" id="tel" class="input-box" />
				<span class="textfieldInvalidFormatMsg">Invalid format.</span>
			</span>  
			<br>
			<span id="sprytextfield3">
				<label for="fax">Fax</label>
				<input type="text" name="fax" id="fax" class="input-box" />
				<span class="textfieldInvalidFormatMsg">Invalid format.</span>
			</span>
			<br>
			<span id="sprytextfield4">
				<label for="mob">Mobile</label>
				<input type="text" name="mob" id="mob" class="input-box" />
				<span class="textfieldInvalidFormatMsg">Invalid format.</span>
			</span>
			<br><br>
		</fieldset>
	</div>

	<div id="buttons">
		<div id="reset"><input name="reset" id="reset" type="reset" value="Reset" /></div>
		<div id="act"><input name="act" id="act" type="hidden" value="insertU" /></div>
		<div id="submit"><input name="submit" id="submit" type="submit" value="Submit" /></div>
	</div>
	
</form>
        <div id="msg">Remember to make a note of the auto-generated username.</div>

	<div id="footer"></div>
</div>
<script type="text/javascript">
<!--
var MenuBar1 = new Spry.Widget.MenuBar("ict_menu", {imgDown:"../SpryAssets/SpryMenuBarDownHover.gif", imgRight:"../SpryAssets/SpryMenuBarRightHover.gif"});
var sprypassword1 = new Spry.Widget.ValidationPassword("sprypassword1", {minChars:6, maxChars:32, minNumbers:1, minUpperAlphaChars:1, minSpecialChars:1});
var spryconfirm1 = new Spry.Widget.ValidationConfirm("spryconfirm1", "pass");
var sprytextfield1 = new Spry.Widget.ValidationTextField("sprytextfield1", "email", {isRequired:false, useCharacterMasking:true});
var sprytextfield2 = new Spry.Widget.ValidationTextField("sprytextfield2", "phone_number", {format:"phone_custom", pattern:"(00000)000000", isRequired:false, useCharacterMasking:true});
var sprytextfield3 = new Spry.Widget.ValidationTextField("sprytextfield3", "phone_number", {format:"phone_custom", pattern:"(00000)000000", isRequired:false, useCharacterMasking:true});
var sprytextfield4 = new Spry.Widget.ValidationTextField("sprytextfield4", "phone_number", {format:"phone_custom", pattern:"(00000)000000", isRequired:false, useCharacterMasking:true});
var spryselect1 = new Spry.Widget.ValidationSelect("spryselect1");
//-->
</script>
<!--[if IE]> </div> <![endif]-->
</body>
</html>	

END

}