<?php
require_once dirname(__FILE__).'/accesscheck.php';

  # try to set the configuration
	if (empty($GLOBALS["SessionTableName"])) return;

  # only necessary on main pages, not in lt/dl etc
  if (basename($_SERVER['SCRIPT_NAME']) != 'index.php') return;

  @ini_set("session.save_handler","user");
  $SessionTableName = $GLOBALS["SessionTableName"];

  if (ini_get("session.save_handler") == "user") {
    session_set_save_handler (
      'mysql_session_open',
      'mysql_session_close',
      'mysql_session_read',
      'mysql_session_write',
      'mysql_session_destroy',
      'mysql_session_gc'
    );
  } else {
  #  @ini_set("session.save_handler","files");
  }

  if (!Sql_Table_exists($GLOBALS["SessionTableName"])) {
    Sql_Create_Table($GLOBALS["SessionTableName"], array(
      "sessionid" => array("CHAR(32) NOT NULL PRIMARY KEY",""),
      "lastactive" => array("INTEGER NOT NULL",""),
      "data" => array("LONGTEXT",""),
    ));
  }

  function mysql_session_open ($save_path, $session_name) {
    return true;
  }

  function mysql_session_close() {
    return true;
  }

  function mysql_session_read ($SessionID) {
  #	dbg("Reading session info for $SessionID");
    $SessionTableName = $GLOBALS["SessionTableName"];
    $SessionID = addslashes($SessionID);

    $session_data_req = sql_query("SELECT data FROM $SessionTableName WHERE sessionid = '$SessionID'");
    if (Sql_Affected_Rows() == 1) {
    	$data = Sql_Fetch_Row($session_data_req);
      return $data[0];
    } else {
      return false;
    }
  }

  function mysql_session_write ($SessionID, $val) {
  #	dbg("writing session info for $SessionID");
    $SessionTableName = $GLOBALS["SessionTableName"];
    $SessionID = addslashes($SessionID);
    $val = addslashes($val);

    $SessionExists = sql_fetch_row_query("select count(*) from  $SessionTableName where sessionid = '$SessionID'");
    if ($SessionExists[0] == 0) {
      $retval = sql_query(sprintf('insert into %s (sessionid,lastactive,data) values("%s",UNIX_TIMESTAMP(NOW()),"%s")',
      $SessionTableName,$SessionID,$val));
    } else {
      $retval = sql_query(sprintf('update %s SET data = "%s", lastactive = UNIX_TIMESTAMP(NOW()) where sessionid = "%s"',
$SessionTableName,$val,$SessionID));
      if (mysql_affected_rows() < 0) {
        logError("unable to update session data for session $SessionID");
        sendError("unable to update session data for session $SessionID");
      }
    }
    return $retval;
  }

  function mysql_session_destroy ($SessionID) {
    $SessionTableName = $GLOBALS["SessionTableName"];
    $SessionID = addslashes($SessionID);
    $retval = sql_query("DELETE FROM $SessionTableName WHERE sessionid = '$SessionID'");
    return $retval;
  }

  function mysql_session_gc ($maxlifetime = 300) {
    $SessionTableName = $GLOBALS["SessionTableName"];
    $CutoffTime = time() - $maxlifetime;
    $retval = sql_query("DELETE FROM $SessionTableName WHERE lastactive < $CutoffTime");
    return $retval;
  }



