Commit 713639ca90a52d2ffa526f1b783845cdd9d6334e

Kano 2014-02-11T09:12:22

miner.php allow links for rig buttons in tables and allow using the 4th IP octet if no rig name - default disabled for both

diff --git a/API-README b/API-README
index 88b29a2..1211f53 100644
--- a/API-README
+++ b/API-README
@@ -1234,6 +1234,27 @@ e.g. $rigs = array('127.0.0.1:4028','myrig.com:4028:Sugoi');
 ---------
 
 Default:
+ $rignames = false;
+
+Set $rignames to false to not affect the display.
+Set $rignames to one of 'ip' or 'ipx' to alter the name displayed
+if the rig doesn't have a 'name' in $rigs
+Currently:
+ 'ip' means use the 4th byte of the rig IP address as an integer
+ 'ipx' means use the 4th byte of the rig IP address as 2 hex bytes
+
+---------
+
+Default:
+ $rigbuttons = true;
+
+Set $rigbuttons to false to display a link rather than a button on
+the left of any summary table with rig buttons, in order to reduce
+the height of the table cells
+
+---------
+
+Default:
  $mcast = false;
 
 Set $mcast to true to look for your rigs and ignore $rigs
diff --git a/miner.php b/miner.php
index ff2e457..1de3951 100644
--- a/miner.php
+++ b/miner.php
@@ -2,6 +2,7 @@
 session_start();
 #
 global $doctype, $title, $miner, $port, $readonly, $notify, $rigs;
+global $rignames, $rigbuttons;
 global $mcast, $mcastexpect, $mcastaddr, $mcastport, $mcastcode;
 global $mcastlistport, $mcasttimeout, $mcastretries, $allowgen;
 global $rigipsecurity, $rigtotals, $forcerigtotals;
@@ -48,6 +49,13 @@ $poolinputs = false;
 #  format: 'IP:Port' or 'Host:Port' or 'Host:Port:Name'
 $rigs = array('127.0.0.1:4028');
 #
+# Set $rignames to false, or one of 'ip' or 'ipx'
+#  this says what to use if $rigs doesn't have a 'name'
+$rignames = false;
+#
+# Set $rigbuttons to false to display a link rather than a button
+$rigbuttons = true;
+#
 # Set $mcast to true to look for your rigs and ignore $rigs
 $mcast = false;
 #
@@ -247,6 +255,9 @@ $colourtable = array(
 $miner = null;
 $port = null;
 #
+global $rigips;
+$rigips = array();
+#
 # Ensure it is only ever shown once
 global $showndate;
 $showndate = false;
@@ -289,6 +300,14 @@ function getdom($domname)
  return getcss($domname, true);
 }
 #
+# N.B. don't call this before calling htmlhead()
+function php_pr($cmd)
+{
+ global $here, $autorefresh;
+
+ return "$here?ref=$autorefresh$cmd";
+}
+#
 function htmlhead($mcerr, $checkapi, $rig, $pg = null, $noscript = false)
 {
  global $doctype, $title, $miner_font_family, $miner_font_size;
@@ -491,7 +510,7 @@ function getrigs()
 #
 function getsock($rig, $addr, $port)
 {
- global $rigipsecurity;
+ global $rigips, $rignames, $rigipsecurity;
  global $haderror, $error, $socksndtimeoutsec, $sockrcvtimeoutsec;
 
  $error = null;
@@ -534,6 +553,9 @@ function getsock($rig, $addr, $port)
 	socket_close($socket);
 	return null;
  }
+ if ($rignames !== false && !isset($rigips[$addr]))
+	if (socket_getpeername($socket, $ip) == true)
+		$rigips[$addr] = $ip;
  return $socket;
 }
 #
@@ -1536,39 +1558,67 @@ function process($cmds, $rig)
 #
 function rigname($rig, $rigname)
 {
- global $rigs;
+ global $rigs, $rignames, $rigips;
 
  if (isset($rigs[$rig]))
  {
 	$parts = explode(':', $rigs[$rig], 3);
 	if (count($parts) == 3)
 		$rigname = $parts[2];
+	else
+		if ($rignames !== false)
+		{
+			switch ($rignames)
+			{
+			case 'ip':
+				if (isset($parts[0]) && isset($rigips[$parts[0]]))
+				{
+					$ip = explode('.', $rigips[$parts[0]]);
+					if (count($ip) == 4)
+						$rigname = intval($ip[3]);
+				}
+				break;
+			case 'ipx':
+				if (isset($parts[0]) && isset($rigips[$parts[0]]))
+				{
+					$ip = explode('.', $rigips[$parts[0]]);
+					if (count($ip) == 4)
+						$rigname = intval($ip[3], 16);
+				}
+				break;
+			}
+		}
  }
 
  return $rigname;
 }
 #
-function riginput($rig, $rigname)
+function riginput($rig, $rigname, $usebuttons)
 {
  $rigname = rigname($rig, $rigname);
 
- return "<input type=button value='$rigname' onclick='pr(\"&rig=$rig\",null)'>";
+ if ($usebuttons === true)
+	return "<input type=button value='$rigname' onclick='pr(\"&rig=$rig\",null)'>";
+ else
+	return "<a href='".php_pr("&rig=$rig")."'>$rigname</a>";
 }
 #
-function rigbutton($rig, $rigname, $when, $row)
+function rigbutton($rig, $rigname, $when, $row, $usebuttons)
 {
  list($value, $class) = fmt('BUTTON', 'Rig', '', $when, $row);
 
  if ($rig === '')
 	$ri = '&nbsp;';
  else
-	$ri = riginput($rig, $rigname);
+	$ri = riginput($rig, $rigname, $usebuttons);
 
  return "<td align=middle$class>$ri</td>";
 }
 #
 function showrigs($anss, $headname, $rigname)
 {
+ global $rigbuttons;
+
  $dthead = array($headname => 1, 'STATUS' => 1, 'Description' => 1, 'When' => 1, 'API' => 1, 'CGMiner' => 1);
  showhead('', $dthead);
 
@@ -1591,7 +1641,7 @@ function showrigs($anss, $headname, $rigname)
 		foreach ($dthead as $name => $x)
 		{
 			if ($item == 'STATUS' && $name == $headname)
-				echo rigbutton($rig, $rigname.$rig, $when, null);
+				echo rigbutton($rig, $rigname.$rig, $when, null, $rigbuttons);
 			else
 			{
 				if (isset($row[$name]))
@@ -1610,7 +1660,7 @@ function showrigs($anss, $headname, $rigname)
 function doforeach($cmd, $des, $sum, $head, $datetime)
 {
  global $miner, $port;
- global $error, $readonly, $notify, $rigs;
+ global $error, $readonly, $notify, $rigs, $rigbuttons;
  global $warnfont, $warnoff, $dfmt;
  global $rigerror;
 
@@ -1747,7 +1797,7 @@ function doforeach($cmd, $des, $sum, $head, $datetime)
 					echo "<td align=right$class>Total:</td>";
 				}
 				else
-					echo rigbutton($rig, "Rig $rig", $when, $row);
+					echo rigbutton($rig, "Rig $rig", $when, $row, $rigbuttons);
 			}
 			else
 			{
@@ -1780,7 +1830,7 @@ function refreshbuttons()
 #
 function pagebuttons($rig, $pg)
 {
- global $readonly, $rigs, $userlist, $ses;
+ global $readonly, $rigs, $rigbuttons, $userlist, $ses;
  global $allowcustompages, $customsummarypages;
 
  if ($rig === null)
@@ -1819,10 +1869,12 @@ function pagebuttons($rig, $pg)
  if ($userlist === null || isset($_SESSION[$ses]))
  {
 	if ($prev !== null)
-		echo riginput($prev, 'Prev').'&nbsp;';
+		echo riginput($prev, 'Prev', true).'&nbsp;';
+
 	echo "<input type=button value='Refresh' onclick='pr(\"$refresh\",null)'>&nbsp;";
+
 	if ($next !== null)
-		echo riginput($next, 'Next').'&nbsp;';
+		echo riginput($next, 'Next', true).'&nbsp;';
 	echo '&nbsp;';
 	if (count($rigs) > 1)
 		echo "<input type=button value='Summary' onclick='pr(\"\",null)'>&nbsp;";
@@ -2184,6 +2236,8 @@ function secmatch($section, $field)
 #
 function customset($showfields, $sum, $section, $rig, $isbutton, $result, $total)
 {
+ global $rigbuttons;
+
  foreach ($result as $sec => $row)
  {
 	$secname = preg_replace('/\d/', '', $sec);
@@ -2200,7 +2254,7 @@ function customset($showfields, $sum, $section, $rig, $isbutton, $result, $total
 
 
 	if ($isbutton)
-		echo rigbutton($rig, $rig, $when, $row);
+		echo rigbutton($rig, $rig, $when, $row, $rigbuttons);
 	else
 	{
 		list($ignore, $class) = fmt('total', '', '', $when, $row);