view Options.inc @ 47:66382989353f

Extract baseDir only once. Function for generating cacheset. Added logger functionality. Removed hardcoded location for flagScript. BUGFIX: masterdocument was not added to the cacheset. BUGFIX: When two options existed next to eachother, the last was not read.
author Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
date Mon, 08 Oct 2012 17:35:08 +0200
parents bd82b719a0de
children c6d0892f81ff
line wrap: on
line source

<?php
class Options
{
  private $defaultLang;
  private $lang;
  private $name;
  private $acceptedLanguages = array();
  private $inputDefaults = array();
  private $cache;
  private $urlParams = array();
  private $basePath;
  private $flagUrl;
  private $baseUrl;

  function getDefaultLang()
  {
    return $this->defaultLang;
  }

  function getLang()
  {
    return $this->lang;
  }

  function getBaseUrl()
  {
    if ($this->baseUrl)
      return $this->baseUrl;

    $request = $_SERVER['REQUEST_URI'];
    $l = strpos($request, '?');
    $base = ($l) ? substr($request, 0 , $l) : $request;

    return "http://" . $_SERVER['HTTP_HOST'] . $base;
  }

  function replacePlaceholders($value)
  {
    $value = preg_replace('/%HOST%/', $_SERVER['HTTP_HOST'], $value);
    return $value;
  }

  function setBaseUrl($baseUrl)
  {
    $baseUrl = self::replacePlaceholders($baseUrl);
    $this->baseUrl = $baseUrl;
  }

  function setFlagUrl($flagUrl)
  {
    $flagUrl = self::replacePlaceholders($flagUrl);
    $this->flagUrl = $flagUrl;
  }

  function getFlagUrl()
  {
    if ($this->flagUrl)
      return $this->flagUrl;

    return $this->getBaseUrl() . "/flag.php";
  }

  function setLang($lang)
  {
    $this->lang = $lang;
  }

  function getBasePath()
  {
    return $this->basePath;
  }

  function setBasePath($basePath)
  {
    $this->basePath = $basePath;
  }

  function setUrlParams($urlParams)
  {
    foreach($urlParams as $key) {
      $value = array_key_exists($key, $_GET) ? $_GET[$key] : '';
      $this->urlParams[$key] = $value;
    }
  }

  function getUrlParams()
  {
    return $this->urlParams;
  }

  function setName($name)
  {
    $this->name = $name;
  }

  function getName()
  {
    return $this->name;
  }

  function setCache($cache)
  {
    $this->cache = $cache;
  }

  function getCache()
  {
    return $this->cache;
  }

  function getAcceptedLanguages()
  {
    return $this->acceptedLanguages;
  }

  function getInputDefault($key)
  {
    return $this->inputDefaults[$key];
  }

  function __construct($baseDocument)
  {
    $params = $baseDocument->getElementsByTagName("param");
    $toRemove = array();
    foreach ($params as $param) {
      if ($param->getAttribute("type") == "option") {
	$id = $param->getAttribute("id");
	if ($id == "lang") {
	  $this->defaultLang = $param->getAttribute("default");
	  $accepts = $param->getElementsByTagName("accept_value");
	  foreach($accepts as $accept) {
	    foreach($accept->childNodes as $child) {
	      array_push($this->acceptedLanguages, $child->nodeValue);
	    }
	  }
	}
	elseif ($id == "baseUrl") {
	  $value = $param->getAttribute("value");
	  if($value)
	    $this->setBaseUrl($value);
	}
	elseif ($id == "flagUrl") {
	  $value = $param->getAttribute("value");
	  if($value)
	    $this->setFlagUrl($value);
	}
	else {
	  warn("Invalid option: ${id}");
	}
	//We need to iterate in the opposite direction when removing,
	//so best shifting.
	array_unshift($toRemove, $param);
      }
      elseif ($param->getAttribute("type") == "input") {
	$id = $param->getAttribute("id");
	$default = $param->getAttribute("default");
	$this->inputDefaults[$id] = $default;
      }
    }
    foreach($toRemove as $param) {
      $parent = $param->parentNode;
      $parent->removeChild($param);
    }
  }
}
?>