<?php
/*******************************************************************************
 * Copyright (c) 2014-2015 Eclipse Foundation 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:
 *    Denis Roy (Eclipse Foundation) - initial API and implementation
 *    Christopher Guindon (Eclipse Foundation)
 *******************************************************************************/
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");

class Hipp {

  #*****************************************************************************
  #
  # hipp.class.php
  #
  # Author:   Denis Roy
  # Date:    2013-11-06
  #
  # Description: Functions and modules related to Hudson HIPP
  #
  # HISTORY:
  #
  # mysql> select * from ProjectServices;
  # +-----+-------------------+-------------+----------------+------------------------+--------------------+------------+----------+-----------+---------+
  # | ID  | ProjectID         | ServiceType | ServiceVersion | ServicePreviousVersion | ServerHost         | ServerPort | XvncBase | OtherData | State   |
  # +-----+-------------------+-------------+----------------+------------------------+--------------------+------------+----------+-----------+---------+
  # |   1 | technology.babel  | hipp        | 3.2.2          | 3.0.1-b2               | hipp6.eclipse.org  |       8215 |      360 | NULL      | running |
  #
  #*****************************************************************************

  var $ID = 0;

  var $ProjectID = "";

  var $ServiceType  = "";

  var $ServiceVersion = "";

  var $ServicePreviousVersion = "";

  var $ServiceLatestVersion = "";

  var $ServerHost = "";

  var $ServerPort = 0;

  var $XvncBase = 0;

  var $OtherData = "";

  var $State = "";

  # Path to HIPP images
  private $HIPPImagePath = "/opt/public/hipp/homes/hudson-wars";

  private $VersionRegexp = '/[^\w\.-]/';

  /**
   * Create HTML for hipp control panel link
   *
   * @param string $id
   *   Project id (technology.cbi)
   *
   * @param string $shortname
   *   Project shortname (cbi)
   *
   * @return string
   */
  public function getControlLink($id, $shortname){
    $state = $this->getState();
    $str = "<span id='" . $shortname . "_state' class='" . $state . "'>" . ucfirst($state) . " (" . $this->getServiceVersion() . ")</span> &#160; <span id='" . $shortname . "_instance'>";

    # Examine Service status to determine control knobs to place
    if ($state == "running") {
      # Add STOP button
      $str .= '<a title="stop" href="#ct" data-action="stop" data-projectid="' . $id . '" data-shortname="' . $shortname . '" class="hipp-control-action-link" ><i class="fa fa-power-off"></i></a> &#160; ';

      # Add RESTART button
      $str .= '<a title="restart" href="#ct" data-action="restart" data-projectid="' . $id . '" data-shortname="' . $shortname . '" class="hipp-control-action-link" ><i class="fa fa-refresh"></i></a>';
    }

    if ($state == "stopped") {
      # Add START button
      $str .= '<a title="start"  href="#ct" data-action="start" data-projectid="' . $id . '" data-shortname="' . $shortname . '" class="hipp-control-action-link" ><i class="fa fa-power-off"></i></a>';
    }

    # Upgrade available?
    if($this->getServiceLatestVersion("hipp") != $this->getServiceVersion() && $this->getServiceLatestVersion("hipp") != "" && $this->getServiceVersion() != "") {

      $str .= '<br /><a title="upgrade"  href="#ct" data-action="upgrade" data-projectid="' . $id . '" data-shortname="' . $shortname . '" class="hipp-control-action-link" ><i class="fa fa-download"></i> Upgrade to ' . $this->getServiceLatestVersion("hipp") . '</a>';
      $readme = $this->getReadmeContents("hipp", $this->getServiceLatestVersion("hipp"));
      if($readme != "") {
        $str .= "<br /><span id='" . $shortname . "_readme'><a title='readme'  href='#ct' data-action='readme' data-projectid='" . $id . "' data-shortname='" . $shortname . "' class='hipp-control-action-link'><i class='fa fa-file-o'></i> README for " . $this->getServiceLatestVersion("hipp") . '</a></span>';
      }
    }

    return $str . "</span>";
  }

  function getID() {
    return $this->ID;
  }

  function getProjectID() {
    return $this->ProjectID;
  }

  function getServiceType() {
    return $this->ServiceType;
  }

  function getServiceVersion() {
    return $this->ServiceVersion;
  }

  function getServicePreviousVersion() {
    return $this->ServicePreviousVersion;
  }

  function getServiceLatestVersion() {
    return $this->ServiceLatestVersion;
  }
  function getServerHost() {
    return $this->ServerHost;
  }

  function getServerPort() {
    return $this->ServerPort;
  }

  function getXvncBase() {
    return $this->XvncBase;
  }

  function getOtherData() {
    return $this->OtherData;
  }

  function getState() {
    return $this->State;
  }

  function setID($_ID) {
    $this->ID = $_ID;
  }

  function setProjectID($_ProjectID) {
    $this->ProjectID = $_ProjectID;
  }

  function setServiceType($_ServiceType) {
    $this->ServiceType = $_ServiceType;
  }

  function setServiceVersion($_ServiceVersion) {
    $this->ServiceVersion = $_ServiceVersion;
  }

  function setServicePreviousVersion($_ServicePreviousVersion) {
    $this->ServicePreviousVersion = $_ServicePreviousVersion;
  }

  function setServiceLatestVersion($_ServiceLatestVersion) {
    # this regexp also in admintools.git:create_hipp
    $this->ServiceLatestVersion = preg_replace($this->VersionRegexp, '', $_ServiceLatestVersion);
  }

  function setServerHost($_ServerHost) {
    $this->ServerHost = $_ServerHost;
  }

  function setServerPort($_ServerPort) {
    $this->ServerPort = $_ServerPort;
  }

  function setXvncBase($_XvncBase) {
    $this->XvncBase = $_XvncBase;
  }

  function setOtherData($_OtherData) {
    $this->OtherData = $_OtherData;
  }

  function setState($_State) {
    $this->State = $_State;
  }

  function selectHIPP($_ProjectID) {
    $App = new App();
    $WHERE = "";

    if ($_ProjectID != "") {
      $WHERE .= " WHERE SRV.ProjectID = " . $App->returnQuotedString($App->sqlSanitize($_ProjectID)) . "
                  AND SRV.ServiceType = 'hipp'";
      $sql = "SELECT /*  hipp.class.php */
          SRV.ID,
          SRV.ProjectID,
          SRV.ServiceType,
          SRV.ServiceVersion,
          SRV.ServicePreviousVersion,
          SRV.ServerHost,
          SRV.ServerPort,
          SRV.XvncBase,
          SRV.OtherData,
          SRV.State
          FROM
          ProjectServices AS SRV "
          . $WHERE;

      $result = $App->foundation_sql($sql);

      if ($myrow = mysql_fetch_array($result)) {
        $this->setID($myrow["ID"]);
        $this->setProjectID($myrow["ProjectID"]);
        $this->setServiceType($myrow["ServiceType"]);
        $this->setServiceVersion($myrow["ServiceVersion"]);
        $this->setServicePreviousVersion($myrow["ServicePreviousVersion"]);
        $this->setServerHost($myrow["ServerHost"]);
        $this->setServerPort($myrow["ServerPort"]);
        $this->setXvncBase($myrow["XvncBase"]);
        $this->setOtherData($myrow["OtherData"]);
        $this->setState($myrow["State"]);
      }
      $result = NULL;
      $myrow = NULL;

      $this->getLatestVersionFromFile("hipp");
    }
  }

  /**
   * getLatestVersionFromFile - read latest version from file
   * @param string - Servicetype (HIPP)
   * @return none
   * @since 2015-02-26
   * @author droy
   */
  function getLatestVersionFromFile($_ServiceType="hipp") {
    if(is_readable($this->HIPPImagePath . "/latest")) {
      $this->setServiceLatestVersion(file_get_contents($this->HIPPImagePath. "/latest"));
    }
  }

  /**
   * getReadmeContents - Fetch README contents for a version
   * @param string - Servicetype (HIPP), string Version (3.2.2)
   * @return String
   * @since 2015-02-26
   * @author droy
   */
  function getReadmeContents($_ServiceType="hipp", $_version) {
    $rValue = "";
    if($_version != "") {
      $_version = preg_replace($this->VersionRegexp, '', $_version);
      $filename = $this->HIPPImagePath . "/hudson-" . $_version . ".README";
      if(is_readable($filename)) {
        $rValue = file_get_contents($filename);
      }
    }
    return $rValue;
  }
}