view majax.inc.php @ 686:8730bffcffd4

Add new return code 903 and handling for it.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 09 Nov 2014 20:36:01 +0200
parents 1005de5ee3f0
children 2b3c17c7b7f8
line wrap: on
line source

<?
//
// FAPWeb - Simple Web-based Demoparty Management System
// Common AJAX Javascript code module
// (C) Copyright 2012-2014 Tecnic Software productions (TNSP)
//


function stCommonAJAX($backend, $failover, $script = FALSE, $tabs = FALSE)
{
if ($script)
  echo "<script type=\"text/javascript\">\n";

?>
function jsCloseMessageBox(callback, cb_data)
{
  var nitem = document.getElementById("messageBox");
  if (nitem && nitem.style.display != "none")
  {
    nitem.style.display = "none";
  
    if (callback && typeof(callback) === "function")
      callback(cb_data);
  }
}


function jsMessageBox(msg)
{
  var nitem = document.getElementById("messageBox");
  if (nitem)
  {
    nitem.innerHTML = "<div class='messageBoxInner'>"+ msg +
      "<div class='messageBoxControls'>"+
      "<input id='msgBoxConfirmClose' type='button' value=' OK '>"+
      "</div></div>";

    document.getElementById("msgBoxConfirmClose").onclick = function () { jsCloseMessageBox(0, 0); }

    nitem.style.display = "block";
  }
}


function jsConfirmBox(msg, cb_ok, cb_cancel, cb_data)
{
  var nitem = document.getElementById("messageBox");
  if (nitem)
  {
    nitem.innerHTML = "<div class='messageBoxInner'><h1>Confirmation</h1><p>"+ msg +"</p>"+
      "<div class='messageBoxControls'>"+
      "<input id='msgBoxConfirmCancel' type='button' value=' Cancel '>"+
      "<input id='msgBoxConfirmOK' type='button' value=' OK '>"+
      "</div></div>";

    document.getElementById("msgBoxConfirmCancel").onclick = function () { jsCloseMessageBox(cb_cancel, cb_data); }
    document.getElementById("msgBoxConfirmOK").onclick = function () { jsCloseMessageBox(cb_ok, cb_data); }
    
    nitem.style.display = "block";
  }
}


function statusMsg(msg)
{
  var nitem = document.getElementById("nstatus");
  if (nitem) nstatus.innerHTML = msg;
}


function strtrim(str)
{
  if (!str || str == null)
    return "";
  return str.replace(/^\s+|\s+$/g,'')
}


function strencode(str)
{
  return encodeURIComponent(str);
}


function jsCreateXMLRequest()
{
  var req;
  if (window.XMLHttpRequest)
  {
    // Modern browsers
    req = new XMLHttpRequest();
  }
  else
  {
    // Old IE versions
    req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  return req;
}


function jsSendPOSTRequest(params, success, failure)
{
<?
  if (($csrfID = stGetSessionItem("csrfID", FALSE)) !== FALSE)
    echo "  params += \"&csrfID=".$csrfID."\";\n";
?>
  var req = jsCreateXMLRequest();
  req.open("POST", "<? echo $backend ?>", true);
  req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  req.setRequestHeader("Content-length", params.length);
  req.setRequestHeader("Connection", "close");

  req.onreadystatechange = function()
  {
    if (req.readyState == 4)
    {
      switch (req.status)
      {
        case 404:
          window.location = "<? echo $failover ?>";
          break;
        
        case 902:
          statusMsg(req.statusText);
          jsMessageBox(req.responseText);
          break;

        case 903:
          var nitem = document.getElementById("adminContent");
          if (nitem) nstatus.innerHTML = req.responseText;
          break;
        
        case 200:
          if (success)
            success(req.responseText);
          statusMsg(req.statusText);
          break;
        
        default:
          if (failure)
            failure(req.status, req.statusText, req.responseText);
          else
            statusMsg("["+req.status+" - "+req.statusText+"] "+ req.responseText);
          break;
      }
    }
  }
  req.send(params);
}


//
// Function for creating AJAX POST request arguments list based
// on fields and giving them specified types. Also basic check
// for validity can be performed (e.g. field empty or not)
//
var lastPostArgs = Object();
function jsMakePostArgs(fields, fprefix, fsuffix, nofail)
{
  var res = [];
  lastPostArgs = Object();

  for (var id in fields)
  {
    var elname = fprefix + id + fsuffix;
    var elem = document.getElementById(elname);
    if (!elem && !nofail)
    {
      jsMessageBox("No such DOM element '"+ elname +"'.");
      return "";
    }

    if (elem)
    switch (fields[id])
    {
      case 1:
        var vstr = strtrim(elem.value);
        res.push(id+"="+strencode(vstr));
        lastPostArgs[id] = vstr;
        break;

      case 2:
        var vint = parseInt(strtrim(elem.value));
        res.push(id+"="+vint);
        lastPostArgs[id] = vint;
        break;

      case 3:
        res.push(id+"="+(elem.checked ? "1" : "0"));
        lastPostArgs[id] = elem.checked;
        break;

      case 4:
        var vval = (elem.selectedValue != -1) ? elem.options[elem.selectedValue].value : -1;
        res.push(id+"="+vval);
        lastPostArgs[id] = vval;
        break;

      default:
        jsMessageBox("Unsupported field type in "+ elname);
        return "";
    }
  }
  return res.join("&");
}


function jsGetValue(elname, eltype)
{
  var elem = document.getElementById(elname);
  if (!elem)
  {
    jsMessageBox("No such DOM element '"+ elname +"'.");
    return "";
  }

  switch (eltype)
  {
    case 1:
      var vstr = strtrim(elem.value);
      return strencode(vstr);

    case 2:
      var vint = parseInt(strtrim(elem.value));
      return vint;

    case 3:
      return elem.checked ? "1" : "0";

    case 4:
      if (elem.selectedIndex != -1)
        return elem.options[elem.selectedIndex].value;
      else
        return null;

    default:
      jsMessageBox("Unsupported field type in "+ elname);
      return "";
  }
}

<? if ($tabs) { ?>

//
// Tab related code
//
var registeredTabs = Object();
var activeTabs = Object();


function jsUpdateTabList(tabset, extra)
{
  var tabs = "";
  var content = "";

  for (var id in registeredTabs[tabset])
  {
    var thead = registeredTabs[tabset][id];
    tabs += "<a id=\"tabHead"+ tabset + id +
      "\"href=\"#\" onClick=\"jsSwitchActiveTab('"+tabset+"', '"+id+
      "')\">"+ thead.replace(/\s/g, "&nbsp;") +"</a> ";
    
    content += "<div id=\"tabCont"+ tabset + id +"\"></div>";
  }

  var item = document.getElementById("tabHeaders"+ tabset);
  if (item) item.innerHTML = tabs + extra;

  item = document.getElementById("tabContents"+ tabset);
  if (item) item.innerHTML = content;
}


function jsRegisterTab(tabset, id, name)
{
  if (!registeredTabs[tabset])
    registeredTabs[tabset] = Object();

  registeredTabs[tabset][id] = name;
}


function jsSwitchActiveTab(tabset, tab)
{
  for (var id in registeredTabs[tabset])
  {
    var tabContent = document.getElementById("tabCont"+ tabset + id);
    var tabHead = document.getElementById("tabHead"+ tabset + id);
    if (tabContent && tabHead)
    {
      tabContent.style.display = (tab == id) ? "block" : "none";
      tabHead.style.borderTop = (tab == id) ? "4px solid white" : "none";
      if (tab == id)
      {
        activeTabs[tabset] = id;
        setTimeout("refreshDispatch"+ tabset +"('"+ id +"');", 10);
      }
    }
  }
}

<?
} // if (tabs)

if ($script)
  echo "</script>\n";
}
?>