You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2016/08/10 13:14:54 UTC
svn commit: r1755738 - in /vcl/trunk/web: .ht-inc/siteconfig.php
.ht-inc/states.php js/siteconfig.js
Author: jfthomps
Date: Wed Aug 10 13:14:54 2016
New Revision: 1755738
URL: http://svn.apache.org/viewvc?rev=1755738&view=rev
Log:
VCL-980 - add KMS server configuration to Site Configuration page
siteconfig.php:
-modified AffilTextVariable class: added $width variable
-modified AffilTextVariable::__construct: set $width to 200px as a default
-modified AffilTextVariable::getHTML: changed hard coded '200px' to $this->width
-modified AffilTextVariable::AJupdateAllSettings: changed how $cdata['origvals'] is handled
-added AffilKMSserver class that extends from AFfilTextVariable
states.php: added affilkmsserver to classmapping
siteconfig.js:
-modified affilhelpaddr: (unrelaed to this JIRA) changed base class from GlobalSingleVariable to AffilTextVariable
-added affilkmsserver
Modified:
vcl/trunk/web/.ht-inc/siteconfig.php
vcl/trunk/web/.ht-inc/states.php
vcl/trunk/web/js/siteconfig.js
Modified: vcl/trunk/web/.ht-inc/siteconfig.php
URL: http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/siteconfig.php?rev=1755738&r1=1755737&r2=1755738&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/siteconfig.php (original)
+++ vcl/trunk/web/.ht-inc/siteconfig.php Wed Aug 10 13:14:54 2016
@@ -109,6 +109,8 @@ function generalOptions($globalopts) {
$obj = new NATportRange();
$h .= $obj->getHTML();
}
+ $obj = new AffilKMSserver();
+ $h .= $obj->getHTML($globalopts);
$h .= "</td>\n";
# -------- end right column --------
@@ -833,6 +835,7 @@ class AffilTextVariable {
var $addmsg;
var $updatemsg;
var $delmsg;
+ var $width;
/////////////////////////////////////////////////////////////////////////////
///
@@ -844,6 +847,7 @@ class AffilTextVariable {
function __construct() {
$this->basecdata = array('obj' => $this);
$this->getValues();
+ $this->width = '200px';
}
/////////////////////////////////////////////////////////////////////////////
@@ -859,7 +863,7 @@ class AffilTextVariable {
/////////////////////////////////////////////////////////////////////////////
///
- /// \fn setValues($affilid, $value)
+ /// \fn setValue($affilid, $value)
///
/// \param $affilid - affiliationid
/// \param $value - value to be set for $affilid
@@ -922,7 +926,7 @@ class AffilTextVariable {
$label = $user['affiliation'];
}
$saveids[] = $key;
- $h .= labeledFormItem($key, $label, 'text', $this->regexp, 1, $val, $this->errmsg, '', '', '200px');
+ $h .= labeledFormItem($key, $label, 'text', $this->regexp, 1, $val, $this->errmsg, '', '', $this->width);
if($globalopts) {
$h .= "<div id=\"{$this->domidbase}affildiv\">\n";
foreach($affils as $affil => $name) {
@@ -931,7 +935,7 @@ class AffilTextVariable {
$key = "{$this->domidbase}_$affil";
$saveids[] = $key;
$h .= "<span id=\"{$key}span\">\n";
- $h .= labeledFormItem($key, $name, 'text', $this->regexp, 1, $this->values[$affil], $this->errmsg, '', '', '200px', '', 0);
+ $h .= labeledFormItem($key, $name, 'text', $this->regexp, 1, $this->values[$affil], $this->errmsg, '', '', $this->width, '', 0);
$h .= dijitButton("{$key}delbtn", i("Delete"), "{$this->jsname}.deleteAffiliationSetting('$affil', '{$this->domidbase}');") . "<br>\n";
$h .= "</span>\n";
unset_by_val($name, $affils);
@@ -945,7 +949,7 @@ class AffilTextVariable {
"dojoType=\"dijit.form.Select\" maxHeight=\"250\"");
$h .= "<input type=\"text\" dojoType=\"dijit.form.ValidationTextBox\" ";
$h .= "id=\"{$this->domidbase}newval\" required=\"true\" invalidMessage=\"{$this->errmsg}\" ";
- $h .= "regExp=\"{$this->regexp}\" style=\"width: 200px;\">\n";
+ $h .= "regExp=\"{$this->regexp}\" style=\"width: {$this->width};\">\n";
$h .= dijitButton("{$this->domidbase}addbtn", i('Add'), "{$this->jsname}.addAffiliationSetting();");
$cont = addContinuationsEntry('AJaddAffiliationSetting', $this->basecdata);
$h .= "<input type=\"hidden\" id=\"{$this->domidbase}addcont\" value=\"$cont\">\n";
@@ -1068,7 +1072,6 @@ class AffilTextVariable {
}
if($newval != $val)
$newvals[$affilid] = $newval;
- $origvals[$affilid] = $newval;
}
$fails = array();
foreach($newvals as $affilid => $val) {
@@ -1078,7 +1081,8 @@ class AffilTextVariable {
# recreate save continuation
$cdata = $this->basecdata;
- $cdata['origvals'] = $origvals;
+ $this->getValues();
+ $cdata['origvals'] = $this->values;
$savecont = addContinuationsEntry('AJupdateAllSettings', $cdata);
if(count($fails)) {
@@ -1203,7 +1207,7 @@ class AffilHelpAddress extends AffilText
/////////////////////////////////////////////////////////////////////////////
///
- /// \fn setValues($affilid, $value)
+ /// \fn setValue($affilid, $value)
///
/// \param $affilid - affiliationid
/// \param $value - value to be set for $affilid
@@ -1246,6 +1250,209 @@ class AffilHelpAddress extends AffilText
doQuery($query);
$rc = mysql_affected_rows($mysql_link_vcl);
if($rc == 1)
+ return 1;
+ return 0;
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
+/// \class AffilKMSserver
+///
+/// \brief extends AffilTextVariable to implement AffilKMSserver
+///
+////////////////////////////////////////////////////////////////////////////////
+class AffilKMSserver extends AffilTextVariable {
+ /////////////////////////////////////////////////////////////////////////////
+ ///
+ /// \fn __construct()
+ ///
+ /// \brief class construstor
+ ///
+ /////////////////////////////////////////////////////////////////////////////
+ function __construct() {
+ parent::__construct();
+ $this->name = i("KMS Servers");
+ $this->desc = i("These are the KMS servers for activating Windows licensing. Multiple servers are allowed, delimited with a comma (,). Non standard ports can be specified after the server delimited with a colon (:). (ex: kms.example.com,kms2.example.com:2000)");
+ $regbase = '((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|([A-Za-z0-9\-\.]+))(:[0-9]{1,5})?';
+ $this->regexp = "$regbase(,$regbase)*";
+ $this->errmsg = i("Invalid IP or hostname specified");
+ $this->domidbase = "affilkmsserver";
+ $this->jsname = "affilkmsserver";
+ $this->addmsg = i("KMS server added for %s");
+ $this->updatemsg = i("Update successful");
+ $this->delmsg = i("KMS server for %s deleted");
+ $this->width = '350px';
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ ///
+ /// \fn getValues()
+ ///
+ /// \brief gets assigned values from database and sets in $this->values
+ ///
+ /////////////////////////////////////////////////////////////////////////////
+ function getValues() {
+ $this->values = array();
+ $query = "SELECT a.id, "
+ . "k.address, "
+ . "k.port "
+ . "FROM affiliation a "
+ . "LEFT JOIN winKMS k ON (k.affiliationid = a.id) "
+ . "ORDER BY a.id";
+ $qh = doQuery($query);
+ while($row = mysql_fetch_assoc($qh)) {
+ if(is_null($row['address']) && is_null($row['port'])) {
+ $this->values[$row['id']] = NULL;
+ continue;
+ }
+ if($row['port'] != 1688)
+ $addr = "{$row['address']}:{$row['port']}";
+ else
+ $addr = $row['address'];
+ if(array_key_exists($row['id'], $this->values))
+ $this->values[$row['id']] .= ",$addr";
+ else
+ $this->values[$row['id']] = $addr;
+ }
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ ///
+ /// \fn setValue($affilid, $value)
+ ///
+ /// \param $affilid - affiliationid
+ /// \param $value - must be IP address or hostname; optionally can have a
+ /// port added to the end delimited with a colon
+ ///
+ /// \brief sets values in database
+ ///
+ /// \return 1 if successfully set values, 0 if error encountered setting
+ /// values
+ ///
+ /////////////////////////////////////////////////////////////////////////////
+ function setValue($affilid, $value) {
+ global $mysql_link_vcl;
+ $this->getValues();
+ $values = explode(',', $value);
+ # create datastructure of newly submitted hosts
+ $newhosts = array();
+ foreach($values as $host) {
+ if(strpos($host, ':') !== FALSE) {
+ $tmp = explode(':', $host);
+ $address = $tmp[0];
+ $port = $tmp[1];
+ }
+ else {
+ $address = $host;
+ $port = 1688;
+ }
+ $newhosts[$address] = $port;
+ }
+ # create datastructure of old hosts
+ $olddata = $this->values[$affilid];
+ $oldhosts = array();
+ if(! is_null($olddata)) {
+ $oldvalues = explode(',', $olddata);
+ foreach($oldvalues as $host) {
+ if(strpos($host, ':') !== FALSE) {
+ $tmp = explode(':', $host);
+ $address = $tmp[0];
+ $port = $tmp[1];
+ }
+ else {
+ $address = $host;
+ $port = 1688;
+ }
+ $oldhosts[$address] = $port;
+ }
+ }
+ # build set of new hosts
+ $adds = array();
+ foreach($newhosts as $newhost => $port) {
+ if(! array_key_exists($newhost, $oldhosts))
+ $adds[$newhost] = $port;
+ }
+ # build set of hosts with changed port
+ $changes = array();
+ foreach($newhosts as $newhost => $port) {
+ if(array_key_exists($newhost, $oldhosts) &&
+ $port != $oldhosts[$newhost])
+ $changes[$newhost] = $port;
+ }
+ # build set of deleted hosts
+ $rems = array();
+ foreach($oldhosts as $oldhost => $port) {
+ if(! array_key_exists($oldhost, $newhosts))
+ $rems[$oldhost] = $port;
+ }
+ if(count($adds) == 0 && count($changes) == 0 && count($rems) == 0)
+ return 1;
+ # insert new hosts
+ $values = array();
+ foreach($adds as $host => $port) {
+ $esc_host = mysql_real_escape_string($host);
+ $values[] = "($affilid, '$esc_host', $port)";
+ }
+ $rc1 = 1;
+ if(count($values)) {
+ $query = "INSERT INTO winKMS "
+ . "(affiliationid, address, port) "
+ . "VALUES " . implode(',', $values);
+ doQuery($query);
+ $rc1 = mysql_affected_rows($mysql_link_vcl);
+ }
+ # make changes
+ $rc2 = 1;
+ foreach($changes as $host => $port) {
+ $esc_host = mysql_real_escape_string($host);
+ $query = "UPDATE winKMS "
+ . "SET port = $port "
+ . "WHERE address = '$esc_host' AND "
+ . "affiliationid = $affilid";
+ doQuery($query);
+ $tmp = mysql_affected_rows($mysql_link_vcl);
+ if($rc2)
+ $rc2 = $tmp;
+ }
+ # delete old hosts
+ $values = array();
+ foreach($rems as $host => $port) {
+ $esc_host = mysql_real_escape_string($host);
+ $values[] = "(affiliationid = $affilid AND "
+ . "address = '$esc_host' AND "
+ . "port = $port)";
+ }
+ $rc3 = 1;
+ if(count($values)) {
+ $query = "DELETE FROM winKMS "
+ . "WHERE " . implode(' OR ', $values);
+ doQuery($query);
+ $rc3 = mysql_affected_rows($mysql_link_vcl);
+ }
+ if($rc1 == 0 || $rc2 == 0 || $rc3 == 0)
+ return 0;
+ return 1;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////
+ ///
+ /// \fn deleteValue()
+ ///
+ /// \param $affilid - affiliationid
+ ///
+ /// \brief deletes a value from the database
+ ///
+ /// \return 1 if successfully deleted value, 0 if error encountered
+ ///
+ /////////////////////////////////////////////////////////////////////////////
+ function deleteValue($affilid) {
+ global $mysql_link_vcl;
+ $query = "DELETE FROM winKMS "
+ . "WHERE affiliationid = $affilid";
+ doQuery($query);
+ $rc = mysql_affected_rows($mysql_link_vcl);
+ if($rc == 1)
return 1;
return 0;
}
Modified: vcl/trunk/web/.ht-inc/states.php
URL: http://svn.apache.org/viewvc/vcl/trunk/web/.ht-inc/states.php?rev=1755738&r1=1755737&r2=1755738&view=diff
==============================================================================
--- vcl/trunk/web/.ht-inc/states.php (original)
+++ vcl/trunk/web/.ht-inc/states.php Wed Aug 10 13:14:54 2016
@@ -578,6 +578,7 @@ $actions['classmapping']['natportrange']
$actions['classmapping']['nfsmounts'] = 'siteconfig';
$actions['classmapping']['messages'] = 'siteconfig';
$actions['classmapping']['affilhelpaddress'] = 'siteconfig';
+$actions['classmapping']['affilkmsserver'] = 'siteconfig';
# resource
$actions['mode']['resource'] = "resource";
Modified: vcl/trunk/web/js/siteconfig.js
URL: http://svn.apache.org/viewvc/vcl/trunk/web/js/siteconfig.js?rev=1755738&r1=1755737&r2=1755738&view=diff
==============================================================================
--- vcl/trunk/web/js/siteconfig.js (original)
+++ vcl/trunk/web/js/siteconfig.js Wed Aug 10 13:14:54 2016
@@ -304,12 +304,19 @@ AffilTextVariable.prototype.deleteAffili
}
function affilhelpaddr() {
- GlobalSingleVariable.apply(this, Array.prototype.slice.call(arguments));
+ AffilTextVariable.apply(this, Array.prototype.slice.call(arguments));
this.domidbase = 'affilhelpaddr';
}
affilhelpaddr.prototype = new AffilTextVariable();
var affilhelpaddr = new affilhelpaddr();
+function affilkmsserver() {
+ AffilTextVariable.apply(this, Array.prototype.slice.call(arguments));
+ this.domidbase = 'affilkmsserver';
+}
+affilkmsserver.prototype = new AffilTextVariable();
+var affilkmsserver = new affilkmsserver();
+
function GlobalSingleVariable() {}
GlobalSingleVariable.prototype.saveSettings = function() {