view showajax.php @ 1096:bbc0a3d0b51e

Major renaming / refactor of site messages. Some that were previously modifiable from admin interface are now "hardcoded" in the configuration file. Having these settings made modifiable from there made no sense and just took space in the UI.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 27 Jan 2017 22:15:06 +0200
parents 7da8bde9b7be
children 0a2117349f46
line wrap: on
line source

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


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

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

  if ($compo["show_authors"])
  {
    if ($title === false)
    echo "    <div class=\"entryBy\">by</div>\n";
    echo "    <div class=\"entryAuthor\">".chentities($entry["author"])."</div>\n";
  }

  if ($title === false)
    echo "    <div class=\"entryInfo\">".stConvertCommonDesc($entry["info"], TRUE)."</div>\n";

  echo
  "  </div>\n";
}


function stPrintCompoSlide($compo, $entry, $prev)
{
  echo
  "  <div class=\"compoHeader\">\n".
  "    <div class=\"compoHeaderDiv\"></div>\n".
  "    <div class=\"compoTitle\">".chentities($compo["name"])." competition</div>\n".
  "  </div>\n";

  if ($entry === false && $prev === false)
    echo "<div class=\"compoStarting\">... Is about to start ...</div>";
  
  if ($entry !== false)
    stPrintCompoEntry($entry, "compoNext", $compo, false);
  
  if ($prev !== false)
    stPrintCompoEntry($prev, "compoPrev", $compo, "Previous entry");
}


function stPrintRotationSlide($data)
{
  echo
  "  <div class=\"slideHeader\">\n".
  "    <div class=\"slideHeaderDiv\"></div>\n".
  "  </div>\n".
  "  <div class=\"slideText\">\n".
  $data.
  "  </div>\n";
}


function stGuruMeditation()
{
  stPrintRotationSlide(
    "<div class=\"guru\">".
    "Software Failure.&nbsp;&nbsp;&nbsp;Press left mouse button to continue.<br />".
    "Guru Meditation #00000004.0000AAC0".
    "</div>\n");
}


//
// Initialize
//
stSetupCacheControl();

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

stReloadDisplayVars();


//
// Check if the slide needs updating?
//
$updated = FALSE;

// Temporary slides are handled globally
if (stGetDisplayVar("tempDuration") > 0 &&
    stGetDisplayVar("tempSlide") > 0 &&
    stGetDisplayVar("tempSlideSet"))
{
  $sql = stPrepareSQL("SELECT * FROM display_slides WHERE id=%d",
    stGetDisplayVar("tempSlide"));

  if (($res = stFetchSQL($sql)) !== false)
  {
    stSetDisplayVar("tempSlideSet", FALSE);
    stSetDisplayVar("activeSlideMode", SMODE_ROTATE);
    stSetDisplayVar("activeSlide", stGetDisplayVar("tempSlide"));
    stSetDisplayVar("activeSlideExpire", time() + (stGetDisplayVar("tempDuration") * 60));
    $updated = TRUE;
  }
}
else
// Otherwise we act according to global show mode
switch (stGetDisplayVar("showMode"))
{
  case SMODE_ROTATE:
    //
    // Rotation / normal slide show mode
    //
    stSetDisplayVar("activeSlideMode", SMODE_ROTATE);
    
    if (stGetDisplayVar("rotateList") == 0)
    {
      stSetDisplayVar("rotateList", 1);
      stSetDisplayVar("activeSlideExpire", 0);
      $updated = TRUE;
    }

    if (time() >= stGetDisplayVar("activeSlideExpire") &&
        stGetDisplayVar("rotateList") > 0)
    {
      // Get list of slides from active rotation list
      $list = stGetDisplayVar("rotateList");
      $sql = stPrepareSQL(
        "SELECT * FROM rot_list_slides WHERE list_id=%d ORDER BY order_num,id",
        $list);

      if (($slideList = stExecSQL($sql)) !== false)
      {
        // Get slide at current index
        $slides = array();
        foreach ($slideList as $slide)
          $slides[] = $slide;
        
        $index = stGetDisplayVar("rotateListIndex");
        if (count($slides) > $index)
        {
          $slide_id = $slides[$index]["slide_id"];
          if ($slide_id != stGetDisplayVar("activeSlide"))
          {
            stSetDisplayVar("activeSlide", $slide_id);
            stSetDisplayVar("activeSlideExpire", time() + stGetDisplayVar("rotateDuration"));
            $updated = TRUE;
          }
        }

        // Rotate to next slide
        if (++$index >= count($slides))
          $index = 0;
        
        stSetDisplayVar("rotateListIndex", $index);
      }
    }
    break;
  
  case SMODE_COMPO:
    //
    // Competition mode, is controlled from admin UI, so we donẗ
    // actually do anything here.
    //
    if (time() >= stGetDisplayVar("activeSlideExpire"))
    {
      stSetDisplayVar("activeSlideMode", SMODE_COMPO);
      $updated = TRUE;
    }
    break;

  case SMODE_DISABLED:
    if (stGetDisplayVar("activeSlideMode") != SMODE_DISABLED)
    {
      stSetDisplayVar("activeSlideMode", SMODE_DISABLED);
      $updated = TRUE;
    }
    break;
}

// Check if we need to update the "last updated" timestamp
if ($updated)
  stDisplayUpdated();


//
// Serve the request
//
$type = stGetRequestItem("type");
switch (stGetRequestItem("action"))
{
  case "check":
    // Check if there has been any change
    $changed = stGetRequestItem("lastUpdate") != stGetDisplayVar("lastUpdate");
    if (stGetDisplayVar("screenCmdSet"))
    {
      echo stGetDisplayVar("screenCmd");
      stSetDisplayVar("screenCmdSet", FALSE);
    }
    else
      echo $changed ? "changed" : "nochange";
    break;

  case "get":
    switch ($type)
    {
      case "update":
        echo stGetDisplayVar("lastUpdate");
        break;

      case "slide":
        // 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 display_slides WHERE id=%d",
                stGetDisplayVar("activeSlide"));

              if (($slide = stFetchSQL($sql)) !== false)
                stPrintRotationSlide($slide["text"]);
            }
            else
              stGuruMeditation();
            break;
          
          case SMODE_COMPO:
            // Competition mode, show entry data
            $compo_id = stGetDisplayVar("compoID");
            $compo = stFetchSQL(stPrepareSQL(
              "SELECT * FROM compos WHERE id=%d",
              $compo_id));

            if ($compo !== false)
            {
              $prev = stFetchSQL(stPrepareSQL(
                "SELECT * FROM entries WHERE compo_id=%d AND show_id=%d AND show_id<>0",
                $compo_id, stGetDisplayVar("compoPrevEntry")));

              $entry = stFetchSQL(stPrepareSQL(
                "SELECT * FROM entries WHERE compo_id=%d AND show_id=%d AND show_id<>0",
                $compo_id, stGetDisplayVar("compoCurrEntry")));

              stPrintCompoSlide($compo, $entry, $prev);
            }
            break;

          default:
            stGuruMeditation();
            break;
        }
        break;
      
      default:
        stGuruMeditation();
        break;
    }
    break;

  default:
    stGuruMeditation();
    break;
}


// Save changed variables
stSaveDisplayVars();

//stDumpAJAXStatusErrors();
?>