<?php 
@session_start(); 
require_once('Smarty/Smarty.class.php'); 
require_once('FlowChart.class.php'); 
 
// Extend the FloeChart class to change the root dir for smarty 
class HelpDeskFlowChart extends FlowChart { 
    var $BaseDir = "/var/www/helpdesk/smarty"; 
} 
 
class Helpdesk { 
    // Storage for the flowchart 
    var $Flowchart; 
 
    // Database setup 
    var $MySQLHost = 'localhost'; 
    var $MySQLUser = 'helpdesk'; 
    var $MySQLPass = 'password'; 
    var $MySQLDatabase = 'Helpdesk'; 
         
    function Helpdesk () { 
        $this->_MySQL = mysql_connect($this->MySQLHost,$this->MySQLUser,$this->MySQLPass); 
        mysql_select_db($this->MySQLDatabase); 
         
        // Cheating - smarty is already loaded in flowchart 
        $this->Flowchart = new HelpDeskFlowChart(); 
         
         $this->DoTickSheet (); 
    } 
     
    function DoTickSheet () { 
        if ($this->GetUsername()) { 
            $this->AssignVar('Username',$_SESSION['Helpdesk']['Username']); 
            if ($this->DisplayDetails()) { 
                if ($this->Flowchart->Run()) { 
                    if ($this->GetComments()) { 
                        $this->SendEmail(); 
                    } 
                } 
            } 
        } else { 
            $this->Flowchart->Smarty->display('username.tpl'); 
        } 
    } 
     
    function AssignVar ($Varname,$Varvalue) { 
        //Cheating function to cut back on typing 
        $this->Flowchart->Smarty->assign($Varname,$Varvalue); 
    } 
     
    function GetUsername () { 
        if (!isset($_SESSION['Helpdesk']['Username'])) { 
            if (isset($_POST['Submit']) && isset($_POST['Username'])) { 
                if ($_POST['Username'] != '[email protected]' && preg_match("/^[A-z0-9][\w\.-]*@[A-z0-9][\w\-\.]+\.[A-z0-9]{2,6}$/",$_POST['Username'])) { 
                    $_SESSION['Helpdesk']['Username'] = $_POST['Username']; 
                    $_SESSION['Helpdesk']['CallStartTime'] = time(); 
                } else { 
                    $this->AssignVar('Error','That doesn\'t appear to be a valid username'); 
                } 
            } 
            if (!isset($_SESSION['Helpdesk']['Username'])) { 
                return false; 
            } 
        } 
        return true; 
    } 
 
    function Cleanup() { 
        unset($_SESSION['Helpdesk']); 
    } 
     
    function GetComments() { 
        if (!isset($_SESSION['Helpdesk']['Comments'])) { 
            if (!isset($_POST['Comments'])) { 
                $this->Flowchart->Smarty->display('comments.tpl'); 
                return false; 
            } else { 
                $_SESSION['Helpdesk']['Comments'] = $_POST['Comments']; 
            } 
        } 
        return true; 
    } 
     
    function SendEmail() { 
        echo "Ticksheet completed<br />\n<pre>"; 
        $History = $this->Flowchart->GetHistory(); 
        print 'Call taken '.date('d-m-Y H:i:s')."\n"; 
        print 'Username: '.$_SESSION['Helpdesk']['Username']."\n\n"; 
        print "Time taken: ".(time() - $_SESSION['Helpdesk']['CallStartTime'])." seconds\n\n"; 
         
        foreach ($History as $Name=>$Value) { 
            print $Value['Question'].' -> '.$Value['SelectedValue']."\n"; 
        } 
        print "\nComments:\n"; 
        print $_SESSION['Helpdesk']['Comments']."\n"; 
        if ($this->Flowchart->EndType == 4) { 
            print "\nThis call has been flagged for further investiagaion\n"; 
        } 
 
        print "</pre>"; 
        print '<br /><a href="index.php"> Take new call </a>'; 
    } 
 
} 
 
 
$Helpdesk = new Helpdesk();
 
 |