/**
 * Given a sessionid this function archives off the transcript and stops
 * a chat session for a given user.
 *
 * @param string SessionID 
 */
function stopchat($sessionid)
{
    global $CSLH_Config, $mydatabase;
    $sqlquery = "SELECT user_id,onchannel,username,lastaction,department,email,sessionid FROM livehelp_users WHERE sessionid='{$sessionid}'";
    $rs = $mydatabase->query($sqlquery);
    $person = $rs->fetchRow(DB_FETCHMODE_ORDERED);
    $user_id = $person[0];
    $onchannel = $person[1];
    $oldusername = $person[2];
    $lastaction = $person[3];
    $userdepartment = $person[4];
    $email = $person[5];
    $sessionid = $person[6];
    $sessiondata = getsessiondata($user_id);
    $trans_array = gettrans($onchannel);
    $sqlquery = "UPDATE livehelp_users SET status='stopped',sessiondata='',chattype='',askquestions='Y' WHERE sessionid='{$sessionid}'";
    $mydatabase->query($sqlquery);
    // if we talked to them add them to the transcripts.
    if ($trans_array['transcript'] != "") {
        // multiple channels can be created for a single chat.. be sure we do not have
        // this chat already:
        $query = "SELECT recno FROM livehelp_transcripts WHERE sessionid='{$sessionid}' AND transcript='" . filter_sql($trans_array['transcript']) . "' ORDER by endtime DESC LIMIT 1";
        $data3 = $mydatabase->query($query);
        if (empty($CSLH_Config['offset'])) {
            $CSLH_Config['offset'] = 0;
        }
        //YYYYMMDDHHIISS
        //  01234567890123
        $when = mktime(substr($trans_array['endtime'], 8, 2), substr($trans_array['endtime'], 10, 2), substr($trans_array['endtime'], 12, 2), substr($trans_array['endtime'], 4, 2), substr($trans_array['endtime'], 6, 2), substr($trans_array['endtime'], 0, 4));
        $trans_array['endtime'] = date("YmdHis", $when);
        $when = mktime(substr($trans_array['starttime'], 8, 2), substr($trans_array['starttime'], 10, 2), substr($trans_array['starttime'], 12, 2), substr($trans_array['starttime'], 4, 2), substr($trans_array['starttime'], 6, 2), substr($trans_array['starttime'], 0, 4));
        $trans_array['starttime'] = date("YmdHis", $when);
        if ($data3->numrows() == 0) {
            $sqlquery = "INSERT INTO livehelp_transcripts (who,endtime,starttime,transcript,sessionid,sessiondata,department,email,duration,operators) VALUES ('" . filter_sql($oldusername) . "','" . $trans_array['endtime'] . "','" . $trans_array['starttime'] . "','" . filter_sql($trans_array['transcript']) . "','" . $sessionid . "','" . filter_sql($sessiondata) . "'," . intval($userdepartment) . ",'" . filter_sql($email) . "'," . $trans_array['duration'] . ",'" . $trans_array['operators'] . "')";
            $mydatabase->query($sqlquery);
            //MYSQL: $transcriptid = mysql_insert_id();
            $query = "SELECT recno FROM livehelp_transcripts ORDER by endtime DESC LIMIT 1";
            $data3 = $mydatabase->query($query);
            $row3 = $data3->fetchRow(DB_FETCHMODE_ASSOC);
            $transcriptid = $row3['recno'];
        } else {
            $row3 = $data3->fetchRow(DB_FETCHMODE_ASSOC);
            $transcriptid = $row3['recno'];
        }
        // get when they startted the chat on this channel in and how many seconds they have been online:
        $query = "SELECT dateof,opid FROM livehelp_operator_history WHERE action='startchat' AND channel=" . intval($onchannel) . " ORDER by dateof DESC LIMIT 1";
        $data3 = $mydatabase->query($query);
        $row3 = $data3->fetchRow(DB_FETCHMODE_ASSOC);
        $opid = $row3['opid'];
        // update history for operator to show login:
        $query = "INSERT INTO livehelp_operator_history (opid,action,dateof,transcriptid) VALUES ({$opid},'Stopchat','" . date("YmdHis") . "','" . $transcriptid . "')";
        $mydatabase->query($query);
    }
    // get rid of old messages.
    $sqlquery = "DELETE FROM livehelp_messages WHERE channel=" . intval($onchannel);
    $mydatabase->query($sqlquery);
    // delete operator channels:
    $sqlquery = "DELETE FROM livehelp_operator_channels WHERE channel=" . intval($onchannel);
    $mydatabase->query($sqlquery);
}
示例#2
0
require_once "settings.php";
require_once "functions.php";
while ($input = readline()) {
    $pid = pcntl_fork();
    if ($pid === -1) {
        die;
    } elseif ($pid === 0) {
        $re1 = '\\d (\\S+) \\[.*The new session \\"(.+)\\" has been created.';
        if ($c = preg_match_all("/" . $re1 . "/is", $input, $matches)) {
            $softetherip = $matches[1][0];
            $sessid = $matches[2][0];
        }
        if (empty($sessid)) {
            exit;
        }
        $result = getsessiondata($sessid);
        // get session details from HUB
        $framedip = getdhcpip($sessid);
        // get DHCP assigned IP from HUB
        if ($framedip === FALSE) {
            // if user could not get ip with dhcp, disconnect it
            disconnectsession($sessid);
            exit;
        }
        $db = new SQLite3($database);
        $db->busyTimeout(5000);
        $db->exec('CREATE TABLE IF NOT EXISTS sessions (sessionid varchar(255), username varchar (255), clientip varchar (255), inputoctets varchar (255), ' . 'outputoctets varchar (255), framedip varchar (255), nasip varchar (255), nasport varchar (255), acctstarttime varchar (255), ' . 'acctsessiontime varchar (255), PRIMARY KEY(sessionid))');
        $query = $db->escapeString('INSERT OR REPLACE INTO sessions (sessionid, username, clientip, inputoctets, outputoctets, framedip, nasip, nasport, acctstarttime, acctsessiontime) VALUES ("' . $sessid . '","' . $result["User Name (Authentication)"] . '","' . $result["Client IP Address"] . '",NULL,NULL,"' . $framedip . '","' . $result["Server IP Address (Reported)"] . '","' . $result["Server Port (Reported)"] . '","' . $result["Connection Started at"] . '",NULL)');
        $db->exec($query);
        $sessid = $db->escapeString($sessid);
        $results = $db->querySingle("SELECT * FROM sessions WHERE sessionid = '" . $sessid . "'", true);
                if (!send_message("Contact", $useremail, $departmentname, $messageemail, $subjectline, $comments, "text/plain", $lang['charset'], false)) {
                    send_message("Contact", $useremail, $departmentname, $messageemail, $subjectline, $comments, "text/plain", $lang['charset'], true);
                }
            }
        }
        // record message in messages database:
        if ($dbfun != "N") {
            $dateof = date("YmdHis");
            if (empty($CSLH_Config['offset'])) {
                $CSLH_Config['offset'] = 0;
            }
            //YYYYMMDDHHIISS
            //  01234567890123
            $when = mktime(substr($dateof, 8, 2), substr($dateof, 10, 2), substr($dateof, 12, 2), substr($dateof, 4, 2), substr($dateof, 6, 2), substr($dateof, 0, 4));
            $dateof = date("YmdHis", $when);
            $sessiondata = getsessiondata($uid, true);
            $q = "INSERT INTO livehelp_leavemessage (email,subject,department,dateof,sessiondata,deliminated) VALUES ('" . filter_sql($useremail) . "','" . filter_sql($subjectline) . "',{$department},{$dateof},'" . filter_sql($sessiondata) . "','" . filter_sql($dilimated) . "') ";
            $mydatabase->query($q);
        }
        #####################################################################################
        ##  No errors, Mail Sent, display message indicating so
        #####################################################################################
        ?>
		<div id='divMsgSent'>
		  <h2><?php 
        echo $lang['txt73'];
        ?>
</h2>
			<hr>
			<p><?php 
        echo $lang['txt71'];