<?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 = mysql_query($sql, $dbh);
while($update_site = mysql_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 = mysql_query($sql, $dbh);
    while ($myrow_files = mysql_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 = mysql_query($sql, $dbh);
  $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 = mysql_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";
?>