<?php

class serverUtil {
  private $logger = "";

  function __construct() {
    $this->logger = new logger(basename(__FILE__));
  }

  // プロジェクトの絶対パスを取得する
  public function getProjectDir() {
    $docroot = $_SERVER['DOCUMENT_ROOT'];
    $fileName = $_SERVER['SCRIPT_NAME'];
    $f = explode("/", $fileName );

    return $docroot."/".$f[1];
  }
  // プロダクトの絶対パスを取得する
  public function getProductDir() {
    $docroot = $_SERVER['DOCUMENT_ROOT'];
    $dirName = dirname($_SERVER['SCRIPT_NAME']);

    return $docroot.$dirName;
  }
  // プロダクトIDを取得する
  public function getProductId() {
    $dirName = dirname($_SERVER['SCRIPT_NAME']);
    $arr = explode("/", $dirName);

    return strtoupper(end($arr));
  }
  // URLのDocumentRootを取得する
  public function getUrlDocumentRoot() {
    $path = $_SERVER['PHP_SELF'];
    //return $path;
    $arr = explode( "/", $path);
    return $arr[1];
  }
  // プロダクト名を取得する
  public function getProductName() {
    $id = $this->getProductId();
    $fileName = __dir__ . "/programList";

    $config = parse_ini_file($fileName);
    $prgName = $config[$id];

    if($prgName) {
      return $prgName;
    }

    return $id;
  }
  // プロジェクトの最終更新日を取得する
  public function getProjectLastUpdate() {
    $root = $this->getProjectDir();

    $iterator = new RecursiveDirectoryIterator($root);
    $iterator = new RecursiveIteratorIterator($iterator);

    $lastUpdate = 0;
    foreach ($iterator as $fileinfo) { // $fileinfoはSplFiIeInfoオブジェクト
      $fileName = $fileinfo->getFilename();
      if( strpos($fileName,".js") || strpos($fileName,".css") )
        if ($fileinfo->isFile()) {
          $ctime = $fileinfo->getCTime();
          if($ctime>$lastUpdate){
            $lastUpdate = $ctime;
          }
        }
    }

    return $lastUpdate;
  }

  // テンプレートの絶対パスを取得する
  // ***/product/???.php -> ***/product/template/???.tpl
  public function getTemplateFile() {
    $docroot = $_SERVER['DOCUMENT_ROOT'];
    $fileName = $_SERVER['SCRIPT_NAME'];
    $dir = dirname($fileName);
    $id = basename($fileName);
    $f = preg_replace('/\.[^.]+$/','',$id);

    return $docroot.$dir."/templates/".$f.".tpl";
  }
  // 個別Javascriptの取得 テンプレートの絶対パスを取得する
  // ***/product/???.php -> ***/product/template/???.tpl
  public function getTemplateJsFile() {
    $docroot = $_SERVER['DOCUMENT_ROOT'];
    $fileName = $_SERVER['SCRIPT_NAME'];
    $dir = dirname($fileName);
    $id = basename($fileName);
    $f = preg_replace('/\.[^.]+$/','',$id);

    return $docroot.$dir."/templates/".$f."_js.tpl";
  }

  public function getUrl() {
    //return (empty($_SERVER["HTTPS"]) ? "http://" : "http://") . $_SERVER['HTTP_HOST'];
    //23.07.13 現地がうまく動いていなかったので変更
    if($_SERVER["HTTPS"]!='on'){ return "http://".$_SERVER['HTTP_HOST'];}
    else{return "https://".$_SERVER['HTTP_HOST'];}
  }

  // エスケープ処理(GET)
  public function ESGET($arg) {
    return ESTAG(trim(stripslashes($_GET[$arg])));
  }

  // エスケープ処理(POST)
  public function ESPOST($arg) {
    return ESTAG(trim(stripslashes($_POST[$arg])));
  }

  // エスケープ処理(HTMLタグ)
  public function ESTAG($arg) {
    return  htmlspecialchars(trim($arg));
  }

  // ポスト用キーの作成
  public function createToken() {
    //FIXME コリジョンの少ない方法の採用
    mt_srand((double)microtime() * 1000000000000);
    $token = sha1(mt_rand());
    $this->saveToken($TOKEN_NAME, $token);
    return $token;
  }

  // ワンタイムトークンの登録
  public function saveToken($name, $token) {
    $_SESSION[$GLOBALS["SYSTEM_NAME_EN"][$name]] = $token;
  }

  // ワンタイムトークンの削除
  public function deleteToken() {
    //トークン変数削除
    $token = $_SESSION[$GLOBALS["SYSTEM_NAME_EN"]][$TOKEN_NAME];
    unset($_SESSION[$GLOBALS["SYSTEM_NAME_EN"]][$TOKEN_NAME]);
    unset($_SESSION[$GLOBALS["SYSTEM_NAME_EN"]][$token]);
  }

  // セッションチェック
  // 1.chgcdの有無
  //  2.1 担当者が合ったら、セッション設定
  //　
  // 1,2が当てはまらなかったら、ログインページに飛ばす
  public function checkSession( $dbutil=null ) {
    //return true;
    if(    strcmp($_SERVER["REQUEST_URI"], $GLOBALS["HOSP_SUB_DIR"]."api/login.php" ) == 0
        || strcmp($_SERVER["REQUEST_URI"], $GLOBALS["HOSP_SUB_DIR"]."api/logout.php" ) ==  0
        || strcmp($_SERVER["REQUEST_URI"], $GLOBALS["HOSP_SUB_DIR"]."api/getChgnm.php" ) ==  0
        || strcmp($_SERVER["REQUEST_URI"], $GLOBALS["HOSP_SUB_DIR"]."index.php" ) == 0
        || strcmp($_SERVER["REQUEST_URI"], $GLOBALS["HOSP_SUB_DIR"]."login.php" ) == 0
        || strcmp($_SERVER["REQUEST_URI"], $GLOBALS["HOSP_SUB_DIR"]."" ) == 0
    ) {
      $this->logger->info("@2",$_SERVER["REQUEST_URI"]);
      return;
    }
    // ログインチェック
    // 担当者
    if( isset( $_SESSION[ $GLOBALS["SYSTEM_NAME_EN"] ]["CHGCD"]) ) {
      $this->logger->info("@1" );
      return;
    }

    // 変数に値がセットされていない場合は不正な処理と判断し、ログイン画面へリダイレクトさせる
//    if($GLOBALS["SYSMODE"] == "0"){ //社内
//      $url = "http://{$_SERVER['HTTP_HOST']}{$GLOBALS['HOSP_SUB_DIR']}";
//    }else{
//      $url = "https://{$_SERVER['HTTP_HOST']}{$GLOBALS['HOSP_SUB_DIR']}";
//    }
    $url = (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER['HTTP_HOST'].$GLOBALS['HOSP_SUB_DIR'];

    $_SESSION[ $GLOBALS["SYSTEM_NAME_EN"] ]["access_token"] = null;

    header("Location: {$url}");
    $this->logger->info("@3" );
    exit;

  }
  public function deleteSession($soft = False) {
    $_SESSION[$SYSTEM_NAME_EN]["CHGCD"] = "";
    $this->deleteToken();

    // logout時
    //// セッションを切断するにはセッションクッキーも削除する。
    //// Note: セッション情報だけでなくセッションを破壊する。
    //if (ini_get("session.use_cookies")) {
    //  $params = session_get_cookie_params();
    //  setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"] );
    //}

    //// 最終的に、セッションを破壊する
    session_destroy();

  }

}

?>
