<?php
/*******************************************************************************
 * Copyright (c) 2013 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Kit Lo (IBM) - [402192] Extract project source files from Git repositories for translation
 *******************************************************************************/

/*
 * Extract properties or js files from update sites 
 */
$temp_dir = "/tmp/tmp-babel/";
$files = array();
$files_collected = array(array());

header("Content-type: text/plain");
include("global.php");
InitPage("");

$headless = 0;
if (!isset($User)) {
  echo "User not defined - running headless\n";
  $User = getGenieUser();
  $headless = 1;
}

require(dirname(__FILE__) . "/../classes/file/file.class.php");
global $dbh;

$temp_unzips_dir = $temp_dir . "unzips/";
if (is_dir($temp_unzips_dir)) {
  exec("rm -rf $temp_unzips_dir");
}
mkdir($temp_unzips_dir, 0777, TRUE) || die("***ERROR: Cannot create working directory: $temp_unzips_dir\n");

global $addon;
$context = $addon->callHook('context');
if ($context == "live") {
  $rsync_host = "download.eclipse.org::eclipseFullMirror/";
} else {
  $rsync_host = "rsync.osuosl.org::eclipse/";
}

# Get all active update sites
$sql = "SELECT * FROM project_source_locations AS m 
INNER JOIN release_train_projects AS r ON r.project_id = m.project_id AND r.version = m.version 
INNER JOIN release_trains AS t on t.train_id = r.train_id 
WHERE t.is_active = 1";
$rs_maps = mysqli_query($dbh, $sql);
while($update_site = mysqli_fetch_assoc($rs_maps)) {
  $site_url = $update_site['location'];
  $project_id = $update_site['project_id'];
  $version = $update_site['version'];

  # Sample dirs:
  # $site_url           http://git.eclipse.org/c/platform/eclipse.platform.git/snapshot/I20130101-0800.zip
  # $temp_snapshots_dir /tmp/tmp-babel/snapshots/eclipse/4.3/
  # $temp_unzips_dir    /tmp/tmp-babel/unzips/eclipse/4.3/
  $temp_snapshots_dir = $temp_dir . "snapshots/" . $project_id . "/" . $version . "/";
  $temp_unzips_dir = $temp_dir . "unzips/" . $project_id . "/" . $version . "/";

  # Collect all files for this project version
  if (!(isset($files_collected[$project_id]) && isset($files_collected[$project_id][$version]))) {
    $files_collected[$project_id][$version] = 1;
    $sql = "SELECT * FROM files WHERE project_id = \"$project_id\" AND version = \"$version\"";
    $rs_files = mysqli_query($dbh, $sql);
    while ($myrow_files = mysqli_fetch_assoc($rs_files)) {
      $file = new File();
      $file->project_id = $myrow_files['project_id'];
      $file->version = $myrow_files['version'];
      $file->name = $myrow_files['name'];
      $file->plugin_id = $myrow_files['plugin_id'];
      $file->file_id = $myrow_files['file_id'];
      $file->is_active = $myrow_files['is_active'];
      $files[$file->file_id] = $file;
    }
  }

  # Collect all plugin exclude patterns for this project version
  $sql = "SELECT pattern FROM plugin_exclude_patterns WHERE project_id = \"$project_id\" AND version = \"$version\"";
  $rs_patterns = mysqli_query($dbh, $sql);
  $patterns = Array();
  # Add default exclude patterns
  $patterns[] = "/^.*\/feature.properties$/";
  $patterns[] = "/^.*\/build.properties$/";
  $patterns[] = "/^.*\/pom.properties$/";
  $patterns[] = "/^.*\.source\/.*$/";
  $patterns[] = "/^.*\.test\/.*$/";
  $patterns[] = "/^.*\.tests\/.*$/";
  $patterns[] = "/^.*\.testing\/.*$/";
  while ($myrow_patterns = mysqli_fetch_assoc($rs_patterns)) {
    $patterns[] = $myrow_patterns['pattern'];
  }

  exec("mkdir -p $temp_snapshots_dir");
  exec("wget $site_url -O ${temp_snapshots_dir}snapshot.zip");

  # Make unzip dir
  mkdir($temp_unzips_dir, 0777, TRUE);
  chdir($temp_unzips_dir);
  exec("unzip -o -q ${temp_snapshots_dir}snapshot.zip");

  # Collect properties file names
  $properties_file_names = array();
  chdir($temp_unzips_dir);
  exec("find . -name *.properties", $properties_file_names);
  sort($properties_file_names);

  # Parse each properties file
  echo "Start processing properties files in project $project_id version $version...\n";
  echo "  Update site location: $site_url\n";
  foreach ($properties_file_names as $properties_file_name) {
	# extract plugin name
    $file_name = $temp_unzips_dir . $properties_file_name;
    $properties_file_name = substr($properties_file_name, strrpos($properties_file_name, "org."));
    $plugin_id = substr($properties_file_name, 0, strpos($properties_file_name, "/"));
    $pos = strpos($properties_file_name, '/');
    if ($pos !== false) {
      $properties_file_name = substr($properties_file_name, $pos);
    }

    # remove optional source dir, e.g. 'src' or 'src_ant'
    $pos = stripos($properties_file_name, '/org/');
    if ($pos !== false) {
      $properties_file_name = substr($properties_file_name, $pos);
    }
    $pos = strripos($properties_file_name, '/com/');
    if ($pos !== false) {
      $properties_file_name = substr($properties_file_name, $pos);
    }

    # get file ID
    $properties_file_name = $plugin_id . $properties_file_name;
	$file_id = File::getFileID($properties_file_name, $project_id, $version);

    # Match plugin exclude list
    $match = false;
    foreach ($patterns as $pattern) {
      if (preg_match($pattern, $properties_file_name)) {
        $match = true;
        break;
      }
    }

    if (!$match) {
      if ($file_id > 0 && $files[$file_id] != null) {
        # Existing file
        $file = $files[$file_id];
        $file->is_active = 1;
        unset($files[$file_id]);
      } else {
        # New file
        $file = new File();
        $file->project_id = $project_id;
        $file->version = $version;
        $file->name = $properties_file_name;
        $file->plugin_id = $plugin_id;
        $file->is_active = 1;
      }
      if (!$file->save()) {
        echo "***ERROR: Cannot save file $file->name\n";
      } else {
        $file_contents = ereg_replace("\r\n?", "\n", file_get_contents($file_name));
        $file->parseProperties($file_contents);
        echo "  $properties_file_name\n";
      }
    } else {
      echo "  !!! Excluding $properties_file_name\n";
    }
  }
  echo "Done processing " . sizeof($properties_file_names) . " properties files in project $project_id version $version\n\n";

  # Collect js file names
  $js_file_names = array();
  chdir($temp_unzips_dir);
  exec("find . -name *.js | grep nls/root", $js_file_names);
  sort($js_file_names);

  # Parse each js file
  echo "Start processing js files in project $project_id version $version...\n";
  echo "  Update site location: $site_url\n";
  foreach ($js_file_names as $js_file_name) {
    $file_name = $temp_unzips_dir . $js_file_name;
    $js_file_name = substr($js_file_name, strrpos($js_file_name, "org.eclipse."));
    $plugin_id = substr($js_file_name, 0, strpos($js_file_name, "/"));
	$file_id = File::getFileID($js_file_name, $project_id, $version);

    # Match plugin exclude list
    $match = false;
    foreach ($patterns as $pattern) {
      if (preg_match($pattern, $js_file_name)) {
        $match = true;
        break;
      }
    }

    if (!$match) {
      if ($file_id > 0 && $files[$file_id] != null) {
        # Existing file
        $file = $files[$file_id];
        $file->is_active = 1;
        unset($files[$file_id]);
      } else {
        # New file
        $file = new File();
        $file->project_id = $project_id;
        $file->version = $version;
        $file->name = $js_file_name;
        $file->plugin_id = $plugin_id;
        $file->is_active = 1;
      }
      if (!$file->save()) {
        echo "***ERROR: Cannot save file $file->name\n";
      } else {
        $file_contents = ereg_replace("\r\n?", "\n", file_get_contents($file_name));
        $file->parseJs($file_contents);
        echo "  $js_file_name\n";
      }
    } else {
      echo "  !!! Excluding $js_file_name\n";
    }
  }
  echo "Done processing " . sizeof($js_file_names) . " js files in project $project_id version $version\n\n";

  chdir($temp_dir);
  exec("rm -rf $temp_snapshots_dir");
  exec("rm -rf $temp_unzips_dir");
}

# Deactivate the rest of the files
echo "Start deactivating inactive properties or js files in all projects above...\n";
foreach ($files as $file) {
  if ($file->is_active == 1) {
    $file->is_active = 0;
    if (!$file->save()) {
      echo "***ERROR: Cannot deactivate file $file->name\n";
    }
    echo "  " . $file->name . "\n";
  } else {
    unset($files[$file->file_id]);
  }
}
echo "Done deactivating " . sizeof($files) . " inactive properties or js files in all projects above\n\n";

chdir($temp_dir);
exec("rm -rf snapshots");
exec("rm -rf unzips");

if ($headless) {
  $User = null;
}

echo "Done\n";
?>