<?php

$base = "models";

$THUMBNAME = "thumb.jpeg";
$RATINGFILE = "rating.txt";
$READMENAME = "README.txt";

// for htaccess
$SECRET_PATTERN = "/# public access/";

$showall = false;
$rating = false;

if (isset($_GET['rating'])){
  $rating = intval($_GET['rating']);
}

$rating = get_allowed_rating($rating);

if (isset($_GET['showall'])){
  $showall = true;
}

$models = selective_scandir($base,false,$rating);
$res = "";

foreach($models as $model){

    $model_path = "$base/$model";
    $thumb = "$model_path/$THUMBNAME";

    $model_rating = get_model_rating("$model_path/$RATINGFILE");

    if ($model_rating>=$rating){

      $versions = selective_scandir($model_path,$showall,0);

      // create thumb
      create_thumbnail($model_path,$versions,$thumb);

      if (!is_file($thumb)){
          $thumb="";
      }

      $res .= "<model name='$model' thumb='$thumb'>\n";

      // read kml
      $res .= "\t<map>\n".parse_kml("$base/$model/$model.kml")."\t</map>\n";

      foreach($versions as $version){

          $res .= "\t<version name='$version'>\n";

          $comments = "-";
          $readme = "$model_path/$version/$READMENAME";
          if (is_file($readme)){
              $comments = trim(file_get_contents($readme),"\t\n\r");
          }

          $res .= "\t\t<comments>$comments</comments>\n";

          $res .= "\t</version>\n";

      }

      $res .= "</model>\n";

    }

}

return_xml($res);

//functions

function selective_scandir($path,$showall,$rating=5){

    $results = Array();

    $contents = scandir($path);

    foreach($contents as $item){
        if ($item!='.'&&$item!='..'&&$item!="jp4"&&is_dir("$path/$item")){
            if ($showall){
              array_push($results,$item);
            }else{
              if (($item[0]!=".")&&($item[0]!="_")){
                array_push($results,$item);
              }
            }

        }
    }

    return $results;

}

function return_xml($str){

    $str = "<?xml version='1.0'  standalone='yes'?>\n<Document>\n$str</Document>";

    header("Content-Type: text/xml");
    header("Content-Length: ".strlen($str)."\n");
    header("Pragma: no-cache\n");
    printf($str);

}

function get_model_rating($file){

  if (is_file($file)){
    $r = intval(trim(file_get_contents($file)));
  }else{
    $r = 0;
  }
  return $r;

}

function get_allowed_rating($r){

  global $SECRET_PATTERN;

  if (is_file(".htaccess")) {

    $htaccess = file_get_contents(".htaccess");

    $m = preg_match($SECRET_PATTERN,$htaccess);

    // restrict to 1
    if ($m) {
      $r = max(1,$r);
    }

  }

  return $r;

}

function create_thumbnail($path,$vpaths,$thumbname){

    if (!is_file($thumbname)){

        if (count($vpaths)>=1){

            $srcpath = "$path/{$vpaths[0]}";

            $files = scandir($srcpath);
            foreach($files as $file){

                $test = preg_match('/(texture-bgnd-ext)/',$file);

                if ($test){
                    $file = "$srcpath/$file";

                    if (extension_loaded('imagick')){

                        $imagick = new Imagick($file);

                        $imagick->trimImage(0);

                        $w = $imagick->getImageWidth();
                        $h = $imagick->getImageHeight();

                        $imagick->borderImage('black', 100, 100);

                        //$imagick->cropImage($w/2, $h/4, $w/4, $h/4);

                        $imagick->thumbnailImage(200, 100, true, true);

                        $imagick->writeImage($thumbname);

                    }
                    break;
                }

                /*
                $pinfo = pathinfo("$srcpath/$file");
                if ($pinfo['extension']=="jpeg"){
                    $file = "$srcpath/$file";
                    echo "go-go-go with $file";
                    break;
                }
                */
            }

        }

    }

    return 0;

}

function parse_kml($file){

    $res = "";

    if (is_file($file)){

        $xml = simplexml_load_file($file);

        $recs = $xml->Document->children();

        foreach($recs as $rec){
            $res .= "\t".$rec->Camera->asXML()."\n";
        }

    }else{
        $res = <<<TEXT
<Camera>
    <longitude>-111.9328843</longitude>
    <latitude>40.7233861</latitude>
    <altitude>1305.1</altitude>
    <heading>0</heading>
    <tilt>90</tilt>
    <roll>00</roll>
</Camera>
TEXT;
    }

    return $res;

}

?>