#!/usr/bin/perl
use strict;
use warnings FATAL=>'all';
use CGI;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use CGI::Session;
use Digest::MD5 qw(md5_hex);
use Data::Dumper;
use DBI;
use XML::Simple;
my %db;
my $xml = new XML::Simple;
my @html;
$0 =~ m|(.*?)/|;
my $path = $1;
my $xmlparse = $xml->XMLin("config.xml");
$db{db} = $xmlparse->{database}{name};
$db{host} = $xmlparse->{database}{host};
$db{user} = $xmlparse->{database}{read}{user};
$db{pass} = $xmlparse->{database}{read}{password};
my $cgi = CGI->new;
my $session = CGI::Session->new or die CGI::Session->errstr;
my %vars = $cgi->Vars;
my %text;
my ($null, @request) = split("/",$ENV{REQUEST_URI});
my @debug;
my $dbh = DBI->connect("DBI:mysql:database=$db{db};host=$db{host}","$db{user}", "$db{pass}", {'RaiseError' => 1}) or die "No connection was made with the mysql: $db{db} database";
debug("Requests: ",@request);
my %preferences;
my $sth_preferences = $dbh->prepare("select * from preferences");
$sth_preferences->execute();
while(my $preference = $sth_preferences->fetchrow_hashref() ){
    $preferences{$preference->{attribute}} = $preference->{value};
}
 
my %articles;
$articles{menu} = ();
my $sth_articles = $dbh->prepare("select * from articles order by menu");
$sth_articles->execute();
while(my $article = $sth_articles->fetchrow_hashref() ){
  $articles{$article->{url}} = $article;
  if($article->{menu} > 0){
    push @{$articles{menu}}, $article->{url};
  }
}
my @tmp = $articles{menu};
#$articles{menu} = sort(@tmp);
if ($cgi->param('logout')){
   $session->delete();
    $session->flush();
    print "Location: $preferences{baseURL}/ \n\n"; 
}else{
  print $session->header();
}
   
#if(defined($request[0]) && $request[0] eq "edit" && !auth() && defined($vars{username}) && defined($vars{password})){
if(!auth() && defined($vars{username}) && defined($vars{password})){
  my $sth_login = $dbh->prepare("select * from users where login=?");
  $sth_login->execute(lc($vars{'username'}));
  while(my $result = $sth_login->fetchrow_hashref()){
    if($result->{password} eq md5_hex($vars{password})){
      $session->param('loggedin', 1);
      $session->param('user',$vars{username});
      $session->param('userid',$result->{userid});
      $session->param('editmode',0);
      $session->param('level',$result->{level});
      debug("$vars{username} logged in");
    }
  }
  unless($session->param('loggedin')){
    $text{error} = "<strong>Geen geldige username/wachtwoord combinatie.</strong><br />";
  }
}
if(defined($request[0]) && $request[0] eq "edit" && auth()){
  $session->param('editmode',1);
}
if(defined($request[0]) && $request[0] eq "stopedit" && auth()){
  $session->param('editmode',0);
}
my $editmode = 0;
if($session->param('editmode')){
  $editmode = 1;
}
print_header();
if(0){
  debug(Dumper $session);
  print_debug() if(defined($session->param('level')) && $session->param('level') > 3);
}
to_site('<div class="navbar navbar-inverse navbar-fixed-top" style="line-height:20px;">
      <div class="navbar-inner">
        <div class="container">
          <a class="brand" href="/" style="margin-left:10px;">'.$preferences{'title'}.'</a>
            <ul class="nav nav-pills" style="float:right;">
  ');
  for(@{$articles{menu}}){
    my $selected = "";
    if(defined($request[0]) && $request[0] eq $_){
      $selected = " class=\"active\"";
    }
    to_site("<li$selected>");
    my $moduleadd = "";
    $moduleadd = "btn-warning\" " if($articles{$_}->{module} eq 2);
    to_site("");
    to_site("<a href='/$articles{$_}->{url}'>");
    to_site($articles{$_}->{title});
    to_site("</a></li>");
  }
    to_site('
            </ul>
        </div>
      </div>
    </div>');
to_site('
    <div class="container">
');
to_site('<span class="span6">Je bent ingelogd als '.$session->param('user').' - <a href="?logout=1">Uitloggen</a>') if(0 && auth());
if(0 && auth()){
  $editmode ? to_site("<a href='/stopedit'>Leave edit mode</a>") : to_site("<a href='/edit'>Edit mode</a>");
}
to_site('</span>');
  if(defined($request[0]) && defined($articles{$request[0]})){
    to_site($articles{$request[0]}->{text});
  }
  else{
    to_site($articles{$preferences{main}}->{text});
  }
print_footer();
  
if(!auth() && 0){
  print $text{error} if($text{error});
  print "<form method='post'>";
  print "<table>";
  print "<tr><td width='30'>Name:</td><td><input type='text' name='username' /></td></tr>";
  print "<tr><td>Password:</td><td><input type='password' name='password' /></td></tr>";
  print "<tr><td></td><td><input type='submit' value='Login' /></td></tr>";
  print "</form>";
}
else{
  print_site();
}
sub print_header{
  to_site("<!doctype html>");
  to_site("<html>");
  to_site("<head>");

  to_site('<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />');
  to_site("<title>$preferences{title}</title>");
  to_site("<link rel=\"stylesheet\" type=\"text/css\" href=\"css/style.css\" />");
  to_site('<link href="css/bootstrap.css" rel="stylesheet" media="screen">');
  to_site('<style>
  html,body{
  margin: 0;
  padding: 0;
  -webkit-appearance:none;
  height:100%;
  background-color:white;
  font-family:mono;
  }
  #wrapper{ 
  margin: 0 auto;
  position:relative; 
  background-color:white;
  background-repeat: repeat-x;
  font-family: helvetica;
  height: auto !important;
  height:100%;
  min-height:100%;
  }
  #footer{
  position:absolute;
  width: 100%; 
  bottom:0px;
  height:20px;
  padding-bottom:20px;
  line-height:20px;
  background-color: white;;
  left:-1px;
  font-family: helvetica;
  text-align:center;
  font-size: 16px;
  }
          </style>');
 to_site("</head>");
  to_site("<body><div id='wrapper'>");
}

sub print_footer{
  to_site('<script type="text/javascript" src="http://lib.sudodev.net/js/jquery-1.7.1.min.js"></script>');
  to_site('<script type="text/javascript" src="http://lib.sudodev.net/js/jquery-ui-1.8.18.custom.min.js"></script>');
  to_site('<script src="js/bootstrap.min.js"></script>');
  to_site(" </div>    <div id='footer'>
        &copy; <a href=\"/sudodev\">$preferences{'company'}</a> 2012<br />
<span style=\"-moz-transform: scaleX(-1); -o-transform: scaleX(-1); -webkit-transform: scaleX(-1); transform: scaleX(-1); display: inline-block;\"> &copy; </span>
- Everything found on this website is published under the GPL V2 License 
      </div>

    </div> ");
to_site("</body>");
  to_site("</html>");
}
sub debug{
  my $dbgtxt =  "[".localtime(time)."] : ";
  $dbgtxt.= $_ for(@_);
  push(@debug, $dbgtxt);
}
sub print_debug{
  my @tmpdeb; 
  push @tmpdeb, "<div class='debug'>";
  for(@debug){
    if(ref($_) eq 'ARRAY'){
      for my $arr (@{$_}){
        push @tmpdeb, "$arr<br />";
       }
    }
    else{
      push @tmpdeb, "$_<br />";
    }
  }
  push @tmpdeb, "</div>";
  for(reverse(@tmpdeb)){
    unshift(@html, $_);
  }
}
sub to_site{
  push (@html, $_[0]);
}
sub print_site{
  print "$_\n" for(@html);
}

sub auth{
    return 1 if(defined($session->param("loggedin")) && $session->param("loggedin") eq 1);
    return 0;
}
