view showajax.php @ 140:20ca8edfb01a

Rename some settings and variables.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 23 Oct 2013 00:04:06 +0300
parents 75cf14ee99a7
children d2e9285b69ad
line wrap: on
line source

<?
//
// FAPWeb Simple Demoparty System
// Party information display system AJAX backend module
// (C) Copyright 2012-2013 Tecnic Software productions (TNSP)
//
require "mconfig.inc.php";
require "msite.inc.php";


function stPrintCompoEntry($entry, $class, $compo, $title = false)
{
  echo
  "  <div class=\"".$class."\">\n"; 
  
  if ($title !== false)
  echo
  "    <div class=\"title\">".$title."</div>\n";

  echo
  "    <div class=\"entryIndex\">#".$entry["show_id"]."</div>\n".
  "    <div class=\"entryName\">".chentities($entry["name"])."</div>\n";

  if ($compo["showAuthors"])
    echo "    <div class=\"entryAuthor\">".chentities($entry["author"])."</div>\n";

  echo
  "    <div class=\"entryInfo\">".chentities($entry["info"])."</div>\n".
  "  </div>\n";
}

function stPrintCompoSlide($compo, $entry, $prev)
{
  echo
  "  <div class=\"compoHeader\">\n".
  "    <img src=\"img/fapsm.png\" /><br />\n".
  "    <div class=\"title\">".chentities($compo["name"])." competition</div>\n".
  "  </div>\n";
  
  if ($entry !== false)
  stPrintCompoEntry($entry, "compoNext", $compo, false);
  
  if ($prev !== false)
    stPrintCompoEntry($prev, "compoPrev", $compo, "Previous entry");
}


function stPrintRotationSlide($slide)
{
  echo
  "  <div class=\"showHeader\">\n".
  "    <img src=\"img/fapsm.png\" /><br />\n".
  "  </div>\n".
  "  <div class=\"showText\">\n".
  $slide["text"].
  "  </div>\n";
}


// Handle requests
stSetupCacheControl();

if (!stConnectSQLDB())
  die("Could not connect to SQL database.");


// Fetch party display variables and settings
if (($res = stExecSQL("SELECT * FROM displayVars")) !== FALSE)
{
  $displayVars = array();
  $displayVarsChanged = array();

  foreach ($res as $row)
  {
    switch ($row["vtype"])
    {
      case VT_INT:  $val = intval($row["vint"]); break;
      case VT_BOOL: $val = intval($row["vint"]) ? true : false; break;
      case VT_STR:  $val = $row["vstr"]; break;
      case VT_TEXT: $val = $row["vtext"]; break;
    }
    $displayVars[$row["key"]] = $val;
  }
}
else
  exit;


function stGetDisplayVar($name)
{
  global $displayVars;
  if (isset($displayVars[$name]))
    return $displayVars[$name];
  else
    die("No display setting for '".$name."'.\n");
}


function stSetDisplayVar($name, $value)
{
  global $displayVars, $displayVarsChanged;
  if (isset($displayVars[$name]))
  {
    $displayVars[$name] = $value;
    $displayVarsChanged[$name] = true;
  }
  else
    die("No display setting for '".$name."'.\n");
}


$action = stChkRequestItem("action") ? $_REQUEST["action"] : "";
switch ($action)
{
  case "check":
    // Check if there has been any change
    $changed = FALSE;
    if (stGetDisplayVar("tempSlideDuration") > 0 && stGetDisplayVar("tempSlide") > 0)
    {
      $sql = stPrepareSQL("SELECT * FROM displaySlides WHERE id=%d",
        stGetDisplayVar("tempSlide"));

      if (($res = stFetchSQL($sql)) !== false)
      {
        stSetDisplayVar("tempSlideDuration", 0);
        stSetDisplayVar("activeSlideMode", SMODE_ROTATE);
        stSetDisplayVar("activeSlide", stGetDisplayVar("tempSlide"));
        stSetDisplayVar("activeSlideExpire", time() + stGetDisplayVar("tempSlideDuration"));
        $changed = TRUE;
      }
    }
    else
    switch (stGetDisplayVar("showMode"))
    {
      case SMODE_ROTATE:
      default:
        stSetDisplayVar("activeSlideMode", SMODE_ROTATE);
        
        if (stGetDisplayVar("rotateList") == 0)
        {
          stSetDisplayVar("rotateList", 1);
          stSetDisplayVar("activeSlideExpire", 0);
          $changed = TRUE;
        }

        if (time() >= stGetDisplayVar("activeSlideExpire") &&
            stGetDisplayVar("rotateList") > 0)
        {
          error_log("slide rotated");

          // Get list of slides from active rotation list
          $list = stGetDisplayVar("rotateList");
          $sql = stPrepareSQL(
            "SELECT * FROM displayListSlides WHERE list_id=%d ORDER BY id",
            $list);

          if (($slideList = stFetchSQL($sql)) !== false)
          {
            // Get slide at current index
            $index = stGetDisplayVar("rotateListIndex");

            if (count($slideList) < $index)
            {
              $slide_id = $slideList[$index]["slide_id"];
              stSetDisplayVar("activeSlide", $slide_id);
              stSetDisplayVar("activeSlideExpire", time() + stGetDisplayVar("rotateSlideTime"));
            }

            // Rotate to next slide
            if (++$index >= count($slideList))
              $index = 0;
            
            stSetDisplayVar("rotateListIndex", $index);
            $changed = TRUE;
          }
        }
        else
        if (stGetDisplayVar("activeSlide") != -1)
        {
          // Emergency slide
          stSetDisplayVar("activeSlide", -1);
          stSetDisplayVar("activeSlideExpire", time() + stGetDisplayVar("rotateSlideTime"));
          $changed = TRUE;
        }
        break;
      
      case SMODE_COMPO:
        break;
    }

    $changed = FALSE;
    
    
    echo $changed ? "changed" : "nochange";
    stSetStatus(200, "OK");
    break;

  case "get":
    // Based on the currently active mode ...
    switch (stGetDisplayVar("activeSlideMode"))
    {
      case SMODE_ROTATE:
        // Slide rotation mode, display currently active slide
        if (stGetDisplayVar("activeSlide") > 0)
        {
          $sql = stPrepareSQL("SELECT * FROM displaySlides WHERE id=%d",
            stGetDisplayVar("activeSlide"));

          if (($slide = stFetchSQL($sql)) !== false)
            stPrintRotationSlide($slide);
        }
        else
        {
          echo "<div>ERROR!</div>\n";
        }
        break;
      
      case SMODE_COMPO:
        // Competition mode
        $compo = stFetchSQL(stPrepareSQL(
          "SELECT * FROM compos WHERE id=%d",
          stGetDisplayVar("compoCompo")));

        $prev = stFetchSQL(stPrepareSQL(
          "SELECT * FROM entries WHERE id=%d",
          stGetDisplayVar("compoPrevEntry")));

        $entry = stFetchSQL(stPrepareSQL(
          "SELECT * FROM entries WHERE id=%d",
          stGetDisplayVar("compoCurrEntry")));

        if ($compo !== false)
          stPrintCompoSlide($compo, $entry, $prev);
        break;
    }
    break;

  default:
    stSetStatus(404, "Not Found");
    break;
}


// Save changed variables
foreach (stExecSQL("SELECT * FROM displayVars") as $item)
if (isset($displayVarsChanged[$item["key"]]))
{
  $val = $displayVars[$item["key"]];
  switch ($item["vtype"])
  {
    case VT_INT:  $vsql = stPrepareSQL("vint=%d", $val); break;
    case VT_BOOL: $vsql = stPrepareSQL("vint=%d", $val ? 1 : 0); break;
    case VT_STR:  $vsql = stPrepareSQL("vstr=%s", $val); break;
    case VT_TEXT: $vsql = stPrepareSQL("vtext=%s", $val); break;
  }
  
  $sql = "UPDATE displayVars SET ".$vsql." WHERE key=".$db->quote($item["key"]);
  stExecSQL($sql);
}
?>