コード例 #1
0
ファイル: portal.server.php プロジェクト: ljhcj/IRISCC
/**
*  init page
*  @return	object				xajax response object
*/
function init()
{
    global $locate, $config, $db;
    $objResponse = new xajaxResponse();
    $check_interval = 2000;
    if (is_numeric($config['system']['status_check_interval'])) {
        $check_interval = $config['system']['status_check_interval'] * 1000;
    }
    $objResponse->addAssign("checkInterval", "value", $check_interval);
    if ($_SESSION['curuser']['usertype'] == 'agent') {
        $noticeInterval = Customer::getNoticeInterval($_SESSION['curuser']['groupid']);
        $_SESSION['ticketNoticeTime'] = '0000-00-00 00:00:00';
        $_SESSION['noticeInterval'] = $noticeInterval;
    } else {
        unset($_SESSION['ticketNoticeTime']);
        unset($_SESSION['noticeInterval']);
    }
    $html = $locate->Translate("welcome") . ':' . $_SESSION['curuser']['username'] . ',';
    $html .= $locate->Translate("extension") . $_SESSION['curuser']['extension'];
    $objResponse->addAssign("divUserMsg", "innerHTML", $html);
    $objResponse->addAssign("username", "value", $_SESSION['curuser']['username']);
    $objResponse->addAssign("extension", "value", $_SESSION['curuser']['extension']);
    $objResponse->addAssign("myevents", "innerHTML", $locate->Translate("waiting"));
    //	$objResponse->addAssign("status","innerHTML", $locate->Translate("listening") );
    $objResponse->addAssign("extensionStatus", "value", 'idle');
    $objResponse->addAssign("processingContent", "innerHTML", $locate->Translate("processing_please_wait"));
    if ($_SESSION['asterisk']['paramdelimiter'] == '|') {
        $objResponse->addAssign("spanAttendtran", "style.display", "none");
    }
    $objResponse->addAssign("spanMonitorStatus", "innerHTML", $locate->Translate("idle"));
    $objResponse->addAssign("btnMonitorStatus", "value", "idle");
    $objResponse->addAssign("btnMonitor", "value", $locate->Translate("start_record"));
    if ($_SESSION['curuser']['WorkStatus'] == '') {
        $objResponse->addAssign("btnWork", "value", $locate->Translate("Start work"));
        $objResponse->addAssign("btnWorkStatus", "value", "");
        $objResponse->addEvent("btnWork", "onclick", "workctrl('start');");
    } else {
        $objResponse->addAssign("btnWork", "value", $locate->Translate("Stop work"));
        $objResponse->addAssign("btnWorkStatus", "value", "working");
        $objResponse->addEvent("btnWork", "onclick", "workctrl('stop');");
        $interval = $_SESSION['curuser']['dialinterval'];
        $objResponse->addScript("autoDial('{$interval}');");
    }
    $objResponse->addAssign("btnMonitor", "disabled", true);
    $objResponse->addAssign("divCopyright", "innerHTML", Common::generateCopyright($skin));
    if ($_SESSION['curuser']['group']['firstring'] == 'caller') {
        $objResponse->addAssign("inviteFlag", "innerHTML", '<-');
    } else {
        $objResponse->addAssign("inviteFlag", "innerHTML", '->');
    }
    //$objResponse->addAssign("divCopyright","innerHTML",Common::generateCopyright($skin));
    if (strtoupper($config['system']['transfer_pannel']) == 'OFF') {
        $objResponse->addAssign("spanTransfer", "style.display", "none");
    } else {
        $objResponse->addAssign("btnTransfer", "disabled", true);
    }
    if (strtoupper($config['system']['dial_pannel']) == 'OFF') {
        $objResponse->addAssign("divInvite", "style.display", "none");
    }
    if (strtoupper($config['system']['monitor_pannel']) == 'OFF') {
        $objResponse->addAssign("divMonitor", "style.display", "none");
        $objResponse->addAssign("monitorTitle", "style.display", "none");
    }
    if ($_SESSION['curuser']['agent'] != '') {
    }
    if (strtoupper($config['system']['mission_pannel']) == 'OFF') {
        $objResponse->addAssign("spanDialList", "style.display", "none");
        $objResponse->addAssign("misson", "style.display", "none");
    } else {
        $objResponse->loadXML(getPrivateDialListNumber($_SESSION['curuser']['extension']));
    }
    if (strtoupper($config['system']['diallist_pannel']) != 'OFF') {
        $objResponse->addAssign("sptAddDiallist", "style.display", "");
        $objResponse->addAssign("dpnShow", "value", "1");
        $objResponse->addScript("showDiallist('" . $_SESSION['curuser']['extension'] . "',0,0,5,'','','','formDiallistPannel','','');");
        //$objResponse->addAssign("formDiallistPannel", "style.visibility", "visible");
    }
    foreach ($_SESSION['curuser']['extensions'] as $extension) {
        $extension = trim($extension);
        $row = astercrm::getRecordByField('username', $extension, 'astercrm_account');
        $objResponse->addScript("addOption('sltExten','" . $row['extension'] . "','{$extension}');");
    }
    $speeddial =& Customer::getAllSpeedDialRecords();
    $speednumber['0']['number'] = $_SESSION['curuser']['extension'];
    $speednumber['0']['description'] = $_SESSION['curuser']['username'];
    $n = 1;
    while ($speeddial->fetchInto($row)) {
        // Change here by the name of fields of its database table
        $speednumber[$n]['description'] = $row['description'];
        $speednumber[$n]['number'] = $row['number'];
        $n++;
    }
    $n = count($speednumber);
    for ($i = 0; $i < $n; ++$i) {
        $objResponse->addScript("addOption('iptDestNumber','" . $speednumber[$i]['number'] . "','" . $speednumber[$i]['description'] . "-" . $speednumber[$i]['number'] . "');");
    }
    $curmsg = Customer::getTicketInWork();
    $panelHTML = '<a href=? onclick="showMyTickets(\'\',\'agent_tickets\');return false;">' . $locate->Translate("MyTickets") . "</a><span id='curticketMsg'>" . $curmsg . '</span><br/>';
    if ($config['system']['display_recent_cdr'] == true && $_SESSION['curuser']['usertype'] == "agent") {
    } else {
        $panelHTML .= '<a href=? onclick="showRecentCdr(\'\',\'recent\');return false;">' . $locate->Translate("recentCDR") . '</a><br/>';
    }
    $panelHTML .= "<a href=? onclick=\"document.getElementById('dpnShow').value = 1;showDiallist('',0,0,5,'','','','formDiallistPannel','','');return false;\">" . $locate->Translate("My Diallist") . "</a><br/>";
    //<span id=\"sptAddDiallist\" style=\"display:none\">
    $panelHTML .= "<a href=? id=\"agentWorkstat\" name=\"agentWorkstat\" onclick=\"document.getElementById('awsShow').value = 1;agentWorkstat();return false;\">" . $locate->Translate("work stat") . "</a><br/>";
    $panelHTML .= "<a href=? id=\"knowledge\" name=\"knowledge\" onclick=\"setKnowledge();return false;\">" . $locate->Translate("viewknowledge") . "</a><br/>";
    $panelHTML .= '<a href=? id="sendSMS" name="sendSMS" onclick="SendSmsForm(\'' . $config['system']['enable_sms'] . '\');return false;">' . $locate->Translate("Send SMS") . '</a><br/>';
    if (!empty($_SESSION['curuser']['privileges']) || $_SESSION['curuser']['usertype'] == "admin" || $_SESSION['curuser']['usertype'] == "groupadmin") {
        $panelHTML .= '<a href=# onclick="this.href=\'managerportal.php\'">' . $locate->Translate("manager") . '</a><br/>';
    }
    $panelHTML .= "<a href='login.php'>" . $locate->Translate("logout") . "</a><br />";
    $objResponse->addAssign("divPanel", "innerHTML", $panelHTML);
    if ($config['system']['enable_external_crm'] == false) {
        //use internal crm
        $objResponse->addIncludeScript("js/astercrm.js");
        $objResponse->addIncludeScript("js/ajax.js");
        $objResponse->addIncludeScript("js/ajax-dynamic-list.js");
        $objResponse->addScript("xajax_showGrid(0," . ROWSXPAGE . ",'','','')");
        $objResponse->addAssign("divSearchContact", "style.visibility", "visible");
    } else {
        $objResponse->addIncludeScript("js/extercrm.js");
        if ($config['system']['open_new_window'] == 'internal') {
            $mycrm = '<iframe id="mycrm" name="mycrm" src="' . $config['system']['external_crm_default_url'] . '?curid=0" width="100%"  frameBorder=0 scrolling=auto height="600"></iframe>';
            $objResponse->addAssign("divCrm", "innerHTML", $mycrm);
        } else {
            if ($config['system']['open_new_window'] == 'external') {
                //$mycrm = '<iframe id="mycrm" name="mycrm" src="'.$config['system']['external_crm_default_url'].'?curid=0" width="100%"  frameBorder=0 scrolling=auto height="600"></iframe>';
                //$objResponse->addAssign("divCrm","innerHTML", $mycrm );
                $mycrm = '<form id="external_crm_form" action="' . $config['system']['external_crm_default_url'] . '?curid=0" target="mycrm" method="post"></form>';
                $objResponse->addAssign("external_crm_openNewDiv", "innerHTML", $mycrm);
                $objResponse->addScript('document.getElementById("external_crm_form").submit();');
            } else {
                $mycrm = '<form id="external_crm_form" action="' . $config['system']['external_crm_default_url'] . '?curid=0" target="mycrm" method="post"></form>';
                $objResponse->addAssign("external_crm_openNewDiv", "innerHTML", $mycrm);
                $objResponse->addScript('document.getElementById("external_crm_form").submit();');
                $mycrm = '<iframe id="mycrm" name="mycrm" src="' . $config['system']['external_crm_default_url'] . '?curid=0" width="100%"  frameBorder=0 scrolling=auto height="600"></iframe>';
                $objResponse->addAssign("divCrm", "innerHTML", $mycrm);
            }
        }
        /*if ($config['system']['open_new_window'] == false){
        			$mycrm = '<iframe id="mycrm" name="mycrm" src="'.$config['system']['external_crm_default_url'].'?curid=0" width="100%"  frameBorder=0 scrolling=auto height="600"></iframe>';
        			$objResponse->addAssign("divCrm","innerHTML", $mycrm );
        		}else{
        			$mycrm = '<iframe id="mycrm" name="mycrm" src="'.$config['system']['external_crm_default_url'].'?curid=0" width="100%"  frameBorder=0 scrolling=auto height="600"></iframe>';
        			$objResponse->addAssign("divCrm","innerHTML", $mycrm );
        
        			$javascript = "openwindow('".$config['system']['external_crm_default_url']."?curid=0')";
        			$objResponse->addScript("document.getElementById('external_crm_form').submit();");
        		}*/
    }
    $monitorstatus = astercrm::getRecordByID($_SESSION['curuser']['groupid'], 'astercrm_accountgroup');
    if ($monitorstatus['monitorforce']) {
        $objResponse->addAssign("chkMonitor", "checked", 'true');
        $objResponse->addAssign("chkMonitor", "style.visibility", 'hidden');
        $objResponse->addAssign("btnMonitor", "disabled", 'true');
    }
    $objResponse->addAssign("clear_popup", "value", $monitorstatus['clear_popup']);
    //for clear popup after ($clear_popup) seconds
    $objResponse->addScript("clearSettimePopup();");
    if ($_SESSION['curuser']['group']['allowloginqueue'] == 'yes' && is_array($_SESSION['curuser']['campaign_queue'])) {
        //print_r($_SESSION['curuser']['campaign_queue']);exit;
        $objResponse->addScript("getMsgInCampaign();");
    } else {
        $objResponse->addAssign("divGetMsgInCampaignP", "style.visibility", 'hidden');
    }
    //if enabled monitor by astercctools
    $configstatus = Common::read_ini_file($config['system']['astercc_path'] . '/astercc.conf', $asterccConfig);
    if ($configstatus == -2) {
        $objResponse->addAlert("fail to read " . $config['system']['astercc_path'] . '/astercc.conf');
    } else {
        if ($asterccConfig['system']['force_record'] == 1) {
            //echo $asterccConfig['system']['force_record'];exit;
            $objResponse->addAssign("chkMonitor", "checked", false);
            $objResponse->addAssign("chkMonitor", "style.visibility", 'hidden');
            $objResponse->addAssign("btnMonitor", "disabled", 'true');
        }
    }
    return $objResponse;
}
コード例 #2
0
ファイル: display_block_map.inc.php プロジェクト: edt82/ona
function ws_display($window_name, $form = '')
{
    global $conf, $self, $ona;
    global $images, $color, $style;
    $html = '';
    $js = '';
    // If the user supplied an array in a string, build the array and store it in $form
    $form = parse_options_string($form);
    // Build $ip from $form['ip_block_start']
    $form['ip_block_start'] = ip_complete($form['ip_block_start'], '0');
    // Since we currently only display /24 (C) class networks, the
    //GD Need to call ip_mangle() so we can use is_ipv4()
    // last quad needs to be a .0.
    $ip = ip_mangle($form['ip_block_start'], 'numeric');
    if (is_ipv4($ip)) {
        $end = '\\.\\d+$';
        $replace_end_by = '.0';
        $version = 4;
    } else {
        $end = ':[0-9A-F]{0,4}$';
        // $replace_end_by = ':0000';
        $replace_end_by = ':';
        $version = 6;
    }
    $ip = $form['ip_block_start'] = preg_replace("/{$end}/", $replace_end_by, $form['ip_block_start']);
    // Find out if $ip is valid
    $ip = ip_mangle($ip, 'numeric');
    if ($ip == -1) {
        $js .= "alert('The IP address specified is invalid!');";
    }
    // Update History Title
    $history = array_pop($_SESSION['ona']['work_space']['history']);
    $js .= "xajax_window_submit('work_space', ' ', 'rewrite_history');";
    if ($history['title'] == $window_name) {
        $history['title'] = 'Map: ' . ip_mangle($ip, 'dotted');
        array_push($_SESSION['ona']['work_space']['history'], $history);
    }
    // Create some javascript to refresh the current page
    $refresh = htmlentities(str_replace(array("'", '"'), array("\\'", '\\"'), $history['url']), ENT_QUOTES, $conf['php_charset']);
    $refresh = "xajax_window_submit('work_space', '{$refresh}');";
    // Define the window's inner html
    $html .= <<<EOL
    <div id="{$window_name}_content" style="padding: 2px 4px;">
        <form id="block_search_form" onsubmit="el('zoom_block_button').onclick(); return false;">
        <div id="{$window_name}_tools">
            <b>IP Address</b>
            <input type="hidden" id="{$window_name}_zoom" name="zoom" value="8">
            <input id="{$window_name}_ip_block_start" name="{$window_name}_ip_block_start" value="{$form['ip_block_start']}" class="edit" type="text" size="15" />
            <a id="zoom_block_button" title="Zoom block"
                       class="act"
                       onClick="xajax_window_submit('work_space', 'xajax_window_submit(\\'{$window_name}\\', \\'ip_block_start=>' + el('{$window_name}_ip_block_start').value + ',zoom=>' + el('{$window_name}_zoom').value + '\\', \\'display\\');');"
            ><img src="{$images}/silk/bullet_go.png" border="0"></a>&nbsp;
        <br><br>
        </div>
        </form>

        <div id="{$window_name}_portal">
            <span id="{$window_name}_substrate"></span>
        </div>

    </div>
EOL;
    // Position/size the portal ourselves
    $js .= <<<EOL
        var _el = el('{$window_name}_portal');

        /* Now calculate where we will sit */
        var my_height = el('work_space_content').offsetHeight - el('{$window_name}_tools').offsetHeight - 40;
        var my_width  = el('{$window_name}_tools').offsetWidth - 10;

        /* Finally reposition/resize the window */
        _el.style.position = 'relative';
        _el.style.height   = my_height + 'px';

EOL;
    // Get javascript to setup the map portal
    $js .= get_portal_js($window_name, $ip, $version);
    //*** Send a fake mouseup event to draw the initial map view ***
    $js .= "el('{$window_name}_portal').myonmouseup('fake event');";
    // Insert the new html into the window
    // Instantiate the xajaxResponse object
    $response = new xajaxResponse();
    // GDO need to use Big Int JS
    $response->addIncludeScript('include/js/bignumber.js');
    $response->addAssign("work_space_content", "innerHTML", $html);
    if ($js) {
        $response->addScript($js);
    }
    return $response->getXML();
}
コード例 #3
0
function includeScript($sFilename)
{
    $objResponse = new xajaxResponse();
    $objResponse->addIncludeScript($sFilename);
    return $objResponse->getXML();
}
コード例 #4
0
/**
*  init page
*  @return object xajax response object
*/
function init($username = "", $passwd = "", $lang = 'en_US')
{
    global $config, $db;
    //echo $username.$passwd.$lang;exit;
    //if($_SESSION['curuser']['username'] != $username){
    $row = astercrm::getRecordByField("username", $username, "astercrm_account");
    if ($row['id'] != '') {
        if (md5($row['password']) == $passwd) {
            $_SESSION = array();
            $_SESSION['curuser']['username'] = trim($username);
            $_SESSION['curuser']['extension'] = $row['extension'];
            $_SESSION['curuser']['usertype'] = $row['usertype'];
            $_SESSION['curuser']['accountcode'] = $row['accountcode'];
            $_SESSION['curuser']['agent'] = $row['agent'];
            $_SESSION['curuser']['extensions'] = array();
            // added by solo 2007-10-90
            $_SESSION['curuser']['channel'] = $row['channel'];
            $_SESSION['curuser']['groupid'] = $row['groupid'];
            if ($row['extensions'] != '') {
                $_SESSION['curuser']['extensions'] = split(',', $row['extensions']);
            }
        }
    }
    //}
    //echo $lang;exit;
    list($_SESSION['curuser']['country'], $_SESSION['curuser']['language']) = split("_", $lang);
    //echo $_SESSION['curuser']['language'];exit;
    $locate = new Localization($_SESSION['curuser']['country'], $_SESSION['curuser']['language'], 'portal');
    //echo $locate->Translate("Search");exit;
    $objResponse = new xajaxResponse();
    $objResponse->addAssign("username", "value", $_SESSION['curuser']['username']);
    $objResponse->addAssign("extension", "value", $_SESSION['curuser']['extension']);
    $objResponse->addAssign("myevents", "innerHTML", $locate->Translate("extension") . $_SESSION['curuser']['extension'] . "-" . $locate->Translate("waiting"));
    $objResponse->addAssign("btnShowPortal", "value", $locate->Translate("portal"));
    $objResponse->addAssign("btnTransfer", "value", $locate->Translate("Transfer"));
    $objResponse->addAssign("btnSearchContact", "value", $locate->Translate("Search"));
    $objResponse->addAssign("spanMonitor", "innerHTML", $locate->Translate("monitor"));
    $objResponse->addAssign("extensionStatus", "value", 'idle');
    $objResponse->addAssign("spanMonitorStatus", "innerHTML", $locate->Translate("idle"));
    $objResponse->addAssign("btnMonitorStatus", "value", "idle");
    $objResponse->addAssign("btnMonitor", "value", $locate->Translate("start_record"));
    $objResponse->addAssign("btnMonitor", "disabled", true);
    $objResponse->addAssign("btnCallCtrl", "value", $locate->Translate("Dial"));
    $objResponse->addAssign("btnTransfer", "disabled", true);
    foreach ($_SESSION['curuser']['extensions'] as $extension) {
        $extension = trim($extension);
        $row = astercrm::getRecordByField('username', $extension, 'astercrm_account');
        $objResponse->addScript("addOption('sltExten','" . $row['extension'] . "','{$extension}');");
    }
    $speeddial =& astercrm::getAllSpeedDialRecords();
    $speednumber['0']['number'] = $_SESSION['curuser']['extension'];
    $speednumber['0']['description'] = $_SESSION['curuser']['username'];
    $n = 1;
    while ($speeddial->fetchInto($row)) {
        // Change here by the name of fields of its database table
        $speednumber[$n]['description'] = $row['description'];
        $speednumber[$n]['number'] = $row['number'];
        $n++;
    }
    $n = count($speednumber);
    for ($i = 0; $i < $n; ++$i) {
        $objResponse->addScript("addOption('iptDestNumber','" . $speednumber[$i]['number'] . "','" . $speednumber[$i]['description'] . "');");
    }
    $panelHTML = '<a href=? onclick="xajax_showRecentCdr(\'\',\'recent\');return false;">' . $locate->Translate("recentCDR") . '</a>&nbsp;&nbsp;';
    if ($_SESSION['curuser']['usertype'] != "agent") {
        $panelHTML .= '<a href=# onclick="this.href=\'managerportal.php\'">' . $locate->Translate("manager") . '</a>&nbsp;&nbsp;';
    }
    if ($config['system']['enable_external_crm'] == false) {
        //use internal crm
        $objResponse->addIncludeScript("js/astercrm.js");
        $objResponse->addIncludeScript("js/ajax.js");
        $objResponse->addIncludeScript("js/ajax-dynamic-list.js");
        $objResponse->addAssign("divSearchContact", "style.visibility", "visible");
    } else {
        $objResponse->addIncludeScript("js/extercrm.js");
        if ($config['system']['open_new_window'] == false) {
            $mycrm = '<iframe id="mycrm" name="mycrm" src="' . $config['system']['external_crm_default_url'] . '" width="100%"  frameBorder=0 scrolling=auto height="100%"></iframe>';
            $objResponse->addAssign("divCrm", "innerHTML", $mycrm);
        } else {
            $javascript = "openwindow('" . $config['system']['external_crm_default_url'] . "')";
            $objResponse->addScript($javascript);
        }
    }
    $monitorstatus = astercrm::getRecordByID($_SESSION['curuser']['groupid'], 'astercrm_accountgroup');
    if ($monitorstatus['monitorforce']) {
        $objResponse->addAssign("chkMonitor", "checked", 'true');
        $objResponse->addAssign("chkMonitor", "style.visibility", 'hidden');
        $objResponse->addAssign("btnMonitor", "disabled", 'true');
    }
    $objResponse->addAssign("divSearchContact", "style.visibility", "visible");
    //if enabled monitor by astercctools
    Common::read_ini_file($config['system']['astercc_path'] . '/astercc.conf', $asterccConfig);
    if ($asterccConfig['system']['force_record'] == 1) {
        $objResponse->addAssign("chkMonitor", "checked", 'false');
        $objResponse->addAssign("chkMonitor", "style.visibility", 'hidden');
        $objResponse->addAssign("btnMonitor", "disabled", 'true');
    }
    return $objResponse;
}
コード例 #5
0
ファイル: display_block.inc.php プロジェクト: edt82/ona
function ws_display($window_name, $form = '')
{
    global $conf, $self, $onadb;
    global $images, $color, $style;
    $html = '';
    $js = '';
    $debug_val = 3;
    // used in the auth() calls to supress logging
    // If the user supplied an array in a string, build the array and store it in $form
    $form = parse_options_string($form);
    // Load the host record
    list($status, $rows, $record) = ona_get_block_record(array('id' => $form['block_id']));
    if ($status or !$rows) {
        array_pop($_SESSION['ona']['work_space']['history']);
        $html .= "<br><center><font color=\"red\"><b>Block doesn't exist!</b></font></center>";
        $response = new xajaxResponse();
        $response->addAssign("work_space_content", "innerHTML", $html);
        return $response->getXML();
    }
    // Update History Title
    $history = array_pop($_SESSION['ona']['work_space']['history']);
    $js .= "xajax_window_submit('work_space', ' ', 'rewrite_history');";
    if ($history['title'] == $window_name) {
        $history['title'] = $record['name'];
        array_push($_SESSION['ona']['work_space']['history'], $history);
    }
    // Create some javascript to refresh the current page
    $refresh = htmlentities(str_replace(array("'", '"'), array("\\'", '\\"'), $history['url']), ENT_QUOTES, $conf['php_charset']);
    $refresh = "xajax_window_submit('work_space', '{$refresh}');";
    $record['ip_addr_start'] = ip_mangle($record['ip_addr_start'], 'dotted');
    $record['ip_addr_end'] = ip_mangle($record['ip_addr_end'], 'dotted');
    $style['content_box'] = <<<EOL
        margin: 10px 20px;
        padding: 2px 4px;
        background-color: #FFFFFF;
        vertical-align: top;
EOL;
    $style['label_box'] = <<<EOL
        font-weight: bold;
        padding: 2px 4px;
        border: solid 1px {$color['border']};
        background-color: {$color['window_content_bg']};
EOL;
    // Escape data for display in html
    foreach (array_keys($record) as $key) {
        $record[$key] = htmlentities($record[$key], ENT_QUOTES, $conf['php_charset']);
    }
    $html .= <<<EOL
    <!-- FORMATTING TABLE -->
    <div style="{$style['content_box']}">
    <table cellspacing="0" border="0" cellpadding="0"><tr>

        <!-- START OF FIRST COLUMN OF SMALL BOXES -->
        <td nowrap="true" valign="top" style="padding-right: 15px;">
EOL;
    // BLOCK INFORMATION
    $html .= <<<EOL
            <table width=100% cellspacing="0" border="0" cellpadding="0" style="margin-bottom: 8px;">

                <tr><td colspan="99" nowrap="true" style="{$style['label_box']}">
                    <!-- LABEL -->
                    <form id="form_block_{$record['id']}"
                        ><input type="hidden" name="block_id" value="{$record['id']}"
                        ><input type="hidden" name="js" value="{$refresh}"
                    ></form>
EOL;
    if (auth('advanced', $debug_val)) {
        $html .= <<<EOL

                    <a title="Edit block"
                       class="act"
                       onClick="xajax_window_submit('edit_block', xajax.getFormValues('form_block_{$record['id']}'), 'editor');"
                    ><img src="{$images}/silk/page_edit.png" border="0"></a>&nbsp;

                    <a title="Delete block"
                       class="act"
                       onClick="var doit=confirm('Are you sure you want to delete this block?');
                                if (doit == true)
                                    xajax_window_submit('edit_block', xajax.getFormValues('form_block_{$record['id']}'), 'delete');"
                    ><img src="{$images}/silk/delete.png" border="0"></a>&nbsp;
EOL;
    }
    $html .= <<<EOL
                    {$record['name']}

                    &nbsp;&nbsp;<a href="?work_space={$window_name}&block_id={$record['id']}"><img title="Direct link to {$record['name']}" src="{$images}/silk/application_link.png" border="0"></a>
                </td>
                </tr>
                <tr>
                    <td align="right" nowrap="true"><b>Name</b>&nbsp;</td>
                    <td class="padding" align="left">{$record['name']}&nbsp;</td>
                </tr>

                <tr>
                    <td align="right" nowrap="true"><b>IP start</b>&nbsp;</td>
                    <td class="padding" align="left">
                        {$record['ip_addr_start']}
                        &nbsp;
                    </td>
                </tr>
                <tr>
                    <td align="right" nowrap="true"><b>IP end</b>&nbsp;</td>
                    <td class="padding" align="left">
                        {$record['ip_addr_end']}
                        &nbsp;
                    </td>
                </tr>
                <tr>
                    <td align="right" nowrap="true"><b>Notes</b>&nbsp;</td>
                    <td class="padding" align="left">
                        {$record['notes']}
                        &nbsp;
                    </td>
                </tr>


            </table>
EOL;
    // END BLOCK INFORMATION
    $html .= <<<EOL
        <!-- END OF FIRST COLUMN OF SMALL BOXES -->
        </td>

        <!-- START OF SECOND COLUMN OF SMALL BOXES -->
        <td valign="top" style="padding-right: 15px;">
EOL;
    // SMALL SUBNET MAP
    // Get the numeric IP address of our subnet (we replace the last quad with a .0)
    $ip_subnet = ip_mangle($record['ip_addr_start'], 'numeric');
    if (is_ipv4($ip_subnet)) {
        $end = '\\.\\d+$';
        $replace_end_by = '.0';
        $version = 4;
    } else {
        $end = ':[0-9A-F]{0,4}$';
        // $replace_end_by = ':0000';
        $replace_end_by = ':';
        $version = 6;
    }
    $ip = ip_mangle(preg_replace("/{$end}/", $replace_end_by, $record['ip_addr_start']), 'numeric');
    $html .= <<<EOL
            <table width=100% cellspacing="0" border="0" cellpadding="0" style="margin-bottom: 8px;">
                <tr><td colspan="99" nowrap="true">
                    <!-- LABEL -->
                    <div style="{$style['label_box']}">
                        <a title="Display full sized subnet map"
                           class="act"
                           onClick="xajax_window_submit('work_space', 'xajax_window_submit(\\'display_block_map\\', \\'ip_block_start=>{$record['ip_addr_start']},ip_block_end=>{$record['ip_addr_end']},id=>{$record['id']}\\', \\'display\\');');"
                        ><img src="{$images}/silk/shape_align_left.png" border="0"></a>&nbsp;
                        <a title="Highlight start of block"
                           class="act"
                           onClick="
                             var _el = el('{$ip_subnet}_row_label');
                             if (_el) {
                               if (_el.style.isHighlighted) {
                                 _el.style.backgroundColor = '#000000';
                                 _el.style.isHighlighted = false;
                               }
                               else {
                                 _el.style.backgroundColor = '{$color['bgcolor_map_selected']}';
                                 _el.style.isHighlighted = true;
                               }
                             }
                           "
                        ><img src="{$images}/silk/paintbrush.png" border="0"></a>&nbsp;
                        <b>Block Map</b>
                    </div>
                </td></tr>

                <tr><td colspan="99" nowrap="true">
                    <input type="hidden" id="{$window_name}_zoom" name="zoom" value="7">
                    <div id="{$window_name}_portal" style="position: relative; height: 150px; width: 355px;">
                        <span id="{$window_name}_substrate"></span>
                    </div>
                </td></tr>
            </table>
EOL;
    // Get javascript to setup the map portal mouse handlers
    // Force ip end to be less than ip start to prevent Block highlighting
    $portal_js .= get_portal_js($window_name, $ip, $version);
    //*** Send a fake mouseup event to draw the initial map view ***
    $portal_js .= "el('{$window_name}_portal').myonmouseup('fake event');";
    // END SMALL SUBNET MAP
    $html .= <<<EOL
        <!-- END OF SECOND COLUMN OF SMALL BOXES -->
        </td>

        <!-- START OF THIRD COLUMN OF SMALL BOXES -->
        <td valign="top" style="padding-right: 15px;">
EOL;
    $html .= <<<EOL
        </td>
        <!-- END OF THIRD COLUMN OF SMALL BOXES -->
    </tr></table>
    </div>
    <!-- END OF TOP SECTION -->
EOL;
    // SUBNET LIST
    $tab = 'subnets';
    $submit_window = "list_{$tab}";
    $form_id = "{$submit_window}_filter_form";
    $_SESSION['ona'][$form_id]['tab'] = $tab;
    $content_id = "{$window_name}_{$submit_window}";
    $html .= <<<EOL
    <!-- SUBNET LIST -->
    <div style="border: 1px solid {$color['border']}; margin: 10px 20px;">

        <!-- Tab & Quick Filter -->
        <table id="{$form_id}_table" cellspacing="0" border="0" cellpadding="0">
            <tr>
                <td id="{$form_id}_subnets_tab" class="table-tab-active">
                    Associated {$tab} <span id="{$form_id}_{$tab}_count"></span>
                </td>

                <td id="{$form_id}_quick_filter" class="padding" align="right" width="100%">
                    <form id="{$form_id}" onSubmit="return false;">
                    <input id="{$form_id}_page" name="page" value="1" type="hidden">
                    <input name="content_id" value="{$content_id}" type="hidden">
                    <input name="form_id" value="{$form_id}" type="hidden">
                    <input name="ip_subnet" value="{$record['ip_addr_start']}" type="hidden">
                    <input name="ip_subnet_thru" value="{$record['ip_addr_end']}" type="hidden">
                    <div id="{$form_id}_filter_overlay"
                         title="Filter"
                         style="position: relative;
                                display: inline;
                                color: #CACACA;
                                cursor: text;"
                         onClick="this.style.display = 'none'; el('{$form_id}_filter').focus();"
                    >Name</div>
                    <input
                        id="{$form_id}_filter"
                        name="filter"
                        class="filter"
                        type="text"
                        value=""
                        size="10"
                        maxlength="20"
                        alt="Quick Filter"
                        onFocus="el('{$form_id}_filter_overlay').style.display = 'none';"
                        onBlur="if (this.value == '') el('{$form_id}_filter_overlay').style.display = 'inline';"
                        onKeyUp="
                            if (typeof(timer) != 'undefined') clearTimeout(timer);
                            code = 'if ({$form_id}_last_search != el(\\'{$form_id}_filter\\').value) {' +
                                   '    {$form_id}_last_search = el(\\'{$form_id}_filter\\').value;' +
                                   '    document.getElementById(\\'{$form_id}_page\\').value = 1;' +
                                   '    xajax_window_submit(\\'{$submit_window}\\', xajax.getFormValues(\\'{$form_id}\\'), \\'display_list\\');' +
                                   '}';
                            timer = setTimeout(code, 700);"
                    >
                    </form>
                </td>

            </tr>
        </table>

        <div id='{$content_id}'>
            {$conf['loading_icon']}
        </div>

    </div>
EOL;
    $js .= <<<EOL
        /* Setup the quick filter */
        el('{$form_id}_filter_overlay').style.left = (el('{$form_id}_filter_overlay').offsetWidth + 10) + 'px';
        {$form_id}_last_search = '';

        /* Tell the browser to load/display the list */
        xajax_window_submit('{$submit_window}', xajax.getFormValues('{$form_id}'), 'display_list');
EOL;
    // Insert the new html into the window
    // Instantiate the xajaxResponse object
    $response = new xajaxResponse();
    // GDO need to use Big Int JS
    $response->addIncludeScript('include/js/bignumber.js');
    $response->addAssign("work_space_content", "innerHTML", $html);
    if ($js) {
        $response->addScript($js . $portal_js);
    }
    return $response->getXML();
}