File: 1.13.2b/server/web/node.edit.php (View as HTML)

  1: <?php
  2: /* -------------------------------------------------------------
  3: This file is part of FreeNATS
  4: 
  5: FreeNATS is (C) Copyright 2008-2011 PurplePixie Systems
  6: 
  7: FreeNATS is free software: you can redistribute it and/or modify
  8: it under the terms of the GNU General Public License as published by
  9: the Free Software Foundation, either version 3 of the License, or
 10: (at your option) any later version.
 11: 
 12: FreeNATS is distributed in the hope that it will be useful,
 13: but WITHOUT ANY WARRANTY; without even the implied warranty of
 14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 15: GNU General Public License for more details.
 16: 
 17: You should have received a copy of the GNU General Public License
 18: along with FreeNATS.  If not, see www.gnu.org/licenses
 19: 
 20: For more information see www.purplepixie.org/freenats
 21: -------------------------------------------------------------- */
 22: 
 23: ob_start();
 24: require("include.php");
 25: $NATS->Start();
 26: if (!$NATS_Session->Check($NATS->DB))
 27: 	{
 28: 	header("Location: ./?login_msg=Invalid+Or+Expired+Session");
 29: 	exit();
 30: 	}
 31: if ($NATS_Session->userlevel<5) UL_Error($NATS->Lang->Item("node.editor"));
 32: ob_end_flush();
 33: Screen_Header($NATS->Lang->Item("node.editor"),1,1,"","main","nodes");
 34: echo "\n<script type=\"text/javascript\">\n";
 35: echo "var iconDivText='";
 36: ShowIcons();
 37: echo "';\n\n";
 38: echo "function showIcons()\n";
 39: echo "{\n";
 40: echo "if (document.getElementById('iconDiv').innerHTML=='') document.getElementById('iconDiv').innerHTML='<br><br>'+iconDivText+'<br><br>';\n";
 41: echo "else document.getElementById('iconDiv').innerHTML='';\n";
 42: echo "}\n\n";
 43: echo "var optionContent='';\n";
 44: echo "function showOptions()\n";
 45: echo "{\n";
 46: echo "if (document.getElementById('nodeoptions').innerHTML=='') document.getElementById('nodeoptions').innerHTML=optionContent;\n";
 47: echo "else\n";
 48: echo " {\n";
 49: echo " if (optionContent=='') optionContent=document.getElementById('nodeoptions').innerHTML;\n";
 50: echo " document.getElementById('nodeoptions').innerHTML='';\n";
 51: echo " }\n";
 52: echo "}\n";
 53: echo "</script>\n\n";
 54: ?>
 55: <br>
 56: <?php
 57: if (isset($_REQUEST['action']))
 58: 	{
 59: 	if ($_REQUEST['action']=="save_edit")
 60: 		{
 61: 		$_REQUEST['showoptions']=1;
 62: 		if (isset($_REQUEST['nodeenabled'])) $nodeenabled=1;
 63: 		else $nodeenabled=0;
 64: 		if (isset($_REQUEST['pingtest'])) $pingtest=1;
 65: 		else $pingtest=0;
 66: 		if (isset($_REQUEST['pingfatal'])) $pingfatal=1;
 67: 		else $pingfatal=0;
 68: 		if (isset($_REQUEST['nodealert'])) $nodealert=1;
 69: 		else $nodealert=0;
 70: 		if (isset($_REQUEST['testinterval'])) $interval=$_REQUEST['testinterval'];
 71: 		else $interval=0;
 72: 		if (!is_numeric($interval)) $interval=0;
 73: 		
 74: 		if (isset($_REQUEST['nsenabled'])) $nsenabled=1;
 75: 		else $nsenabled=0;
 76: 		
 77: 		$q="UPDATE fnnode SET ";
 78: 		$q.="nodename=\"".ss($NATS->StripGPC($_REQUEST['nodename']))."\",";
 79: 		$q.="nodedesc=\"".ss($NATS->StripGPC($_REQUEST['nodedesc']))."\",";
 80: 		$q.="testinterval=".ss($interval).",";
 81: 		if (isset($_REQUEST['scheduleid'])) $q.="scheduleid=".ss($_REQUEST['scheduleid']).",";
 82: 		$q.="nodeicon=\"".ss($_REQUEST['nodeicon'])."\",";
 83: 		$q.="nodealert=".ss($nodealert).",";
 84: 		$q.="nodeenabled=".ss($nodeenabled).",pingtest=".ss($pingtest).",pingfatal=".ss($pingfatal).",";
 85: 		$q.="nsenabled=".ss($nsenabled).",";
 86: 		
 87: 		$q.="masterid=\"".ss($_REQUEST['masterid'])."\",";
 88: 		$q.="masterjustping=".ss($_REQUEST['masterjustping']).",";
 89: 		
 90: 		if (isset($_REQUEST['nsurl'])) $q.="nsurl=\"".ss($NATS->StripGPC($_REQUEST['nsurl']))."\",";
 91: 		if (isset($_REQUEST['nskey'])) $q.="nskey=\"".ss($NATS->StripGPC($_REQUEST['nskey']))."\",";
 92: 		if (isset($_REQUEST['nspuship'])) $q.="nspuship=\"".ss($_REQUEST['nspuship'])."\",";
 93: 		if (isset($_REQUEST['nsinterval']))
 94: 			{
 95: 			$q.="nsinterval=".ss($_REQUEST['nsinterval']).",";
 96: 			// Also use this text field as the indication that ns data is provided at all
 97: 			if (isset($_REQUEST['nspullenabled'])) $set=1;
 98: 			else $set=0;
 99: 			$q.="nspullenabled=".$set.",";
100: 			if (isset($_REQUEST['nspushenabled'])) $set=1;
101: 			else $set=0;
102: 			$q.="nspushenabled=".$set.",";
103: 			}
104: 		
105: 		$q.="hostname=\"".ss($_REQUEST['hostname'])."\"";
106: 		
107: 		//if ($NATS->Cfg->Get("dev.links",0)==1)
108: 		//{
109: 		// Utility Links
110: 		for ($a=0; $a<3; $a++)
111: 			{
112: 			$ulink="ulink".$a;
113: 			$utitle=$ulink."_title";
114: 			$uurl=$ulink."_url";
115: 			if (isset($_REQUEST[$ulink])) $ulinkv=1;
116: 			else $ulinkv=0;
117: 			$q.=",".$ulink."=".$ulinkv.",";
118: 			$q.=$utitle."=\"".ss($_REQUEST[$utitle])."\",";
119: 			$q.=$uurl."=\"".ss($_REQUEST[$uurl])."\"";
120: 			}
121: 		//}
122: 			
123: 		
124: 		
125: 		$q.=" WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\"";
126: 		//echo $q;
127: 		$NATS->DB->Query($q);
128: 		
129: 		if ($NATS->DB->Affected_Rows()<=0) 
130: 			{
131: 			echo "<b style=\"color: red;\">".$NATS->Lang->Item("save.failed")."</b><br>";
132: 			$poplist[]=$NATS->Lang->Item("save.failed");
133: 			}
134: 		else 
135: 			{
136: 			echo "<b style=\"color: green;\">".$NATS->Lang->Item("save.ok")."</b><br>";
137: 			$poplist[]=$NATS->Lang->Item("save.ok");
138: 			}
139: 			
140: 		// Update Interval If Changed
141: 		if ( isset($_REQUEST['testinterval']) && isset($_REQUEST['original_testinterval']) &&
142: 			( $_REQUEST['testinterval'] != $_REQUEST['original_testinterval'] ) )
143: 				$NATS->InvalidateNode($_REQUEST['nodeid']);
144: 				
145: 		// Update Nodeside if Newly Enabled and empty...
146: 		if ( isset($_REQUEST['original_nsenabled']) && ($_REQUEST['original_nsenabled']==0) && ($nsenabled==1) )
147: 			{
148: 			$q="SELECT nskey FROM fnnode WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\"";
149: 			$r=$NATS->DB->Query($q);
150: 			if ($row=$NATS->DB->Fetch_Array($r))
151: 				{
152: 				if ($row['nskey']=="") // generate one
153: 					{
154: 					$allow="abcdef0123456789";
155: 					$len=64;
156: 					$alen=strlen($allow);
157: 					mt_srand(microtime()*1000000);
158: 					$key="";
159: 					for ($a=0; $a<$len; $a++)
160: 						$key.=$allow[mt_rand(0,$alen-1)];
161: 					$uq="UPDATE fnnode SET nskey=\"".$key."\" WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\"";
162: 					$NATS->DB->Query($uq);
163: 					}
164: 				$NATS->DB->Free($r);
165: 				}
166: 			}
167: 				
168: 		}
169: 	else if ($_REQUEST['action']=="invalidate")
170: 		{
171: 		$_REQUEST['showoptions']=1;
172: 		$NATS->InvalidateNode($_REQUEST['nodeid'],true);
173: 		}
174: 	else if ($_REQUEST['action']=="nodesiderefresh")
175: 		{
176: 		$_REQUEST['showoptions']=1;
177: 		$res=$NATS->NodeSide_Pull($_REQUEST['nodeid']);
178: 		if ($res===false) 
179: 			{
180: 			$poplist[]=$NATS->Lang->Item("nodeside.fetch.error");
181: 			echo "<b style=\"color: red;\">".$NATS->Lang->Item("nodeside.fetch.error")."</b><br><br>";
182: 			}
183: 		else 
184: 			{
185: 			$poplist[]=$NATS->Lang->Item("nodeside.refreshed");
186: 			echo "<b style=\"color: green;\">".$NATS->Lang->Item("nodeside.refreshed")."</b><br><br>";
187: 			}
188: 		}
189: 	else if ($_REQUEST['action']=="save_actions")
190: 		{
191: 		// build the two lists...
192: 		$cur=array();
193: 		$cc=0;
194: 		$nl=array();
195: 		$nc=0;
196: 		
197: 		if (isset($_REQUEST['links']))
198: 			{
199: 			foreach($_REQUEST['links'] as $link)
200: 				{
201: 				$nl[$link]['proc']=false; // not processed or existing i.e. outstanding
202: 				$nl[$link]['aaid']=$link;
203: 				$nc++;
204: 				}
205: 			}
206: 			
207: 		$q="SELECT nalid,aaid FROM fnnalink WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\"";
208: 		$r=$NATS->DB->Query($q);
209: 		while ($row=$NATS->DB->Fetch_Array($r))
210: 			{
211: 			//echo $row['aaid'].":";
212: 			$cur[$row['aaid']]['proc']=false;
213: 			$cur[$row['aaid']]['nalid']=$row['nalid'];
214: 			$cur[$row['aaid']]['aaid']=$row['aaid'];
215: 			$cc++;
216: 			}
217: 		
218: 		// now we have the two lists lets process them
219: 		foreach($nl as $newone)
220: 			{
221: 			if (isset($cur[$newone['aaid']])) // exists - do nothing to both
222: 				{
223: 				//echo "<br>".$newone['aaid'].":";
224: 				$cur[$newone['aaid']]['proc']=true;
225: 				$nl[$newone['aaid']]['proc']=true;
226: 				}
227: 			// otherwise news are left false to insert and curs false to delete
228: 			}
229: 			
230: 		// so lets do that
231: 		foreach($nl as $newone)
232: 			{
233: 			if ($newone['proc']==false)
234: 				{
235: 				//echo $q;
236: 				$q="INSERT INTO fnnalink(aaid,nodeid) VALUES(".ss($newone['aaid']).",\"".ss($_REQUEST['nodeid'])."\")";
237: 				$NATS->DB->Query($q);
238: 				}
239: 			}
240: 		foreach($cur as $curone)
241: 			{
242: 			if ($curone['proc']==false)
243: 				{
244: 				$q="DELETE FROM fnnalink WHERE nalid=".$curone['nalid'];
245: 				$NATS->DB->Query($q);
246: 				//echo $q;
247: 				}
248: 			}
249: 			
250: 		echo $NATS->Lang->Item("save.ok")."<br><br>";
251: 		$poplist[]=$NATS->Lang->Item("save.ok");
252: 		
253: 			
254: 		}
255: 		
256: 	}
257: 		
258: 
259: 
260: echo "<b class=\"subtitle\">".$NATS->Lang->Item("editing")." <a href=main.php?mode=nodes>".$NATS->Lang->Item("node")."</a>: ";
261: echo "<a href=node.php?nodeid=".$_REQUEST['nodeid'].">".$_REQUEST['nodeid']."</a></b><br><br>";
262: 
263: 
264: $q="SELECT * FROM fnnode WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" LIMIT 0,1";
265: $r=$NATS->DB->Query($q);
266: if (!$row=$NATS->DB->Fetch_Array($r))
267: 	{
268: 	echo $NATS->Lang->Item("no.such.node")."<br><br>";
269: 	Screen_Footer();
270: 	exit();
271: 	}
272: $NATS->DB->Free($r);
273: 
274: $title="<b class=\"sectitle\">".$NATS->Lang->Item("node.settings")."</b>";
275: Start_Round($title,600);
276: echo "<form action=node.edit.php method=post>";
277: echo "<div id=\"nodeoptions\">";
278: echo "<table border=0 width=100%>";
279: 
280: echo "<input type=hidden name=action value=save_edit>";
281: echo "<input type=hidden name=nodeid value=".$_REQUEST['nodeid'].">";
282: 
283: echo "<tr><td align=right>";
284: echo $NATS->Lang->Item("node.id");
285: echo " :</td><td align=left><b>";
286: echo $row['nodeid'];
287: echo "</b></td></tr>";
288: 
289: echo "<tr><td align=right>";
290: echo $NATS->Lang->Item("node.name");
291: echo " :</td><td align=left>";
292: echo "<input type=text name=nodename size=20 maxlength=128 value=\"".$row['nodename']."\">";
293: echo "</td></tr>";
294: 
295: echo "<tr><td align=right>";
296: echo $NATS->Lang->Item("hostname");
297: echo " :</td><td align=left>";
298: echo "<input type=text name=hostname size=20 maxlength=128 value=\"".$row['hostname']."\">";
299: echo "</td></tr>";
300: 
301: echo "<tr><td align=right>";
302: echo $NATS->Lang->Item("description");
303: echo " :</td><td align=left>";
304: echo "<input type=text name=nodedesc size=30 maxlength=200 value=\"".$row['nodedesc']."\">";
305: echo "</td></tr>";
306: 
307: echo "<tr><td align=right>";
308: echo $NATS->Lang->Item("node.icon");
309: echo " :</td><td align=left>";
310: echo "<select name=nodeicon>";
311: if ($row['nodeicon']!="") echo "<option value=\"".$row['nodeicon']."\">".$row['nodeicon']."</option>";
312: echo "<option value=\"\">".$NATS->Lang->Item("default")."</option>";
313: $iconList=GetIcons();
314: foreach($iconList as $icon)
315: 	echo "<option value=\"".$icon."\">".$icon."</option>";
316: //echo "</select> [ <a href=node.edit.php?nodeid=".$_REQUEST['nodeid']."&show_icons=1>Show Icons</a> ]";
317: echo "</select> [ <a href=\"javascript:showIcons()\">".$NATS->Lang->Item("show.hide.icons")."</a> ]";
318: echo "</td></tr>";
319: 
320: echo "<tr><td colspan=2>";
321: echo "<div id=\"iconDiv\"></div>";
322: echo "</td></tr>";
323: 
324: echo "<tr><td align=right>";
325: echo $NATS->Lang->Item("master.node");
326: echo " :</td><td align=left>";
327: echo "<select name=masterid>\n";
328: if ($row['masterid']=="") $s=" selected";
329: else $s="";
330: echo "<option value=\"\"".$s.">".$NATS->Lang->Item("no.master")."</option>\n";
331: 
332: $nlq="SELECT nodeid,nodename FROM fnnode ORDER BY weight ASC";
333: $nlr=$NATS->DB->Query($nlq);
334: while ($noderow=$NATS->DB->Fetch_Array($nlr))
335: 	{
336: 	if ($noderow['nodeid'] != $row['nodeid']) // not this node
337: 		{
338: 		if ($noderow['nodeid'] == $row['masterid']) // this is the master
339: 			$s=" selected";
340: 		else
341: 			$s="";
342: 		echo "<option value=\"".$noderow['nodeid']."\"".$s.">";
343: 		if ($noderow['nodename']!="") echo $noderow['nodename']." (".$noderow['nodeid'].")";
344: 		else echo $noderow['nodeid'];
345: 		echo "</option>\n";
346: 		}
347: 	}
348: $NATS->DB->Free($nlr);
349: 
350: 
351: echo "</select> ".hlink("Node:Master")."\n";
352: echo "</td></tr>";
353: 
354: echo "<tr><td align=right>";
355: echo $NATS->Lang->Item("master.skip");
356: echo " :</td><td align=left>";
357: echo "<select name=masterjustping>\n";
358: 
359: if ($row['masterjustping']==1) $s=" selected";
360: else $s="";
361: 
362: echo "<option value=1".$s.">".$NATS->Lang->Item("fails.ping")."</option>\n";
363: if ($s=="") $s=" selected";
364: else $s="";
365: echo "<option value=0".$s.">".$NATS->Lang->Item("fails.any.test")."</option>\n";
366: 
367: echo "</select> ".hlink("MasterNode:Ping")."\n";
368: echo "</td></tr>";
369: echo "<tr><td colspan=2><hr class=\"nspacer\"></td></tr>";
370: 
371: echo "<tr><td align=right>";
372: echo $NATS->Lang->Item("node.enabled");
373: echo " :</td><td align=left>";
374: if ($row['nodeenabled']==1) $s=" checked";
375: else $s="";
376: echo "<input type=checkbox value=1 name=nodeenabled".$s.">";
377: echo " ".hlink("Node:Enabled");
378: echo "</td></tr>";
379: 
380: echo "<tr><td align=right>";
381: echo $NATS->Lang->Item("test.schedule");
382: echo " :</td><td align=left>";
383: echo "<select name=scheduleid>";
384: echo "<option value=0>At All Times</option>";
385: $sq="SELECT scheduleid,schedulename FROM fnschedule";
386: $sr=$NATS->DB->Query($sq);
387: while ($sched=$NATS->DB->Fetch_Array($sr))
388: 	{
389: 	if ($sched['scheduleid']==$row['scheduleid']) $s.=" selected";
390: 	else $s="";
391: 	echo "<option value=".$sched['scheduleid'].$s.">".$sched['schedulename']."</option>";
392: 	}
393: echo "</select>";
394: $NATS->DB->Free($sr);
395: echo " ".hlink("Schedule");
396: echo "</td></tr>";
397: 
398: echo "<tr><td align=right>";
399: echo $NATS->Lang->Item("test.interval");
400: echo " :</td><td align=left>";
401: echo "<input type=text name=testinterval size=2 maxlength=8 value=\"".$row['testinterval']."\"> ";
402: echo $NATS->Lang->Item("minutes")." ".hlink("Node:TestInterval");
403: echo "</td></tr>";
404: echo "<input type=hidden name=original_testinterval value=\"".$row['testinterval']."\"";
405: 
406: echo "<tr><td align=right valign=top>";
407: echo $NATS->Lang->Item("test.due");
408: echo " :</td><td align=left>";
409: if ($row['nextrunx']>0) echo nicedt($row['nextrunx']);
410: else echo $NATS->Lang->Item("now");
411: echo "<br>";
412: echo nicenextx($row['nextrunx']);
413: echo " <a href=node.edit.php?nodeid=".$_REQUEST['nodeid']."&action=invalidate>".$NATS->Lang->Item("check.asap")."</a> ";
414: echo hlink("Node:CheckASAP",12);
415: echo "</td></tr>";
416: 
417: echo "<tr><td align=right>";
418: echo $NATS->Lang->Item("alerts.active");
419: echo " :</td><td align=left>";
420: if ($row['nodealert']==1) $s=" checked";
421: else $s="";
422: echo "<input type=checkbox value=1 name=nodealert".$s.">";
423: echo " ".hlink("Node:AlertActive");
424: echo "</td></tr>";
425: 
426: echo "<tr><td colspan=2><hr class=\"nspacer\"></td></tr>";
427: 
428: echo "<tr><td align=right>";
429: echo $NATS->Lang->Item("ping.test");
430: echo " :</td><td align=left>";
431: if ($row['pingtest']==1) $s=" checked";
432: else $s="";
433: echo "<input type=checkbox value=1 name=pingtest".$s.">";
434: echo " ".hlink("Node:PingTest");
435: echo "</td></tr>";
436: 
437: echo "<tr><td align=right>";
438: echo $NATS->Lang->Item("require.ping");
439: echo " :</td><td align=left>";
440: if ($row['pingfatal']==1) $s=" checked";
441: else $s="";
442: echo "<input type=checkbox value=1 name=pingfatal".$s.">";
443: echo " ".hlink("Node:RequirePing");
444: echo "</td></tr>";
445: 
446: echo "<tr><td colspan=2><hr class=\"nspacer\"></td></tr>";
447: 
448: echo "<tr><td align=right>";
449: echo $NATS->Lang->Item("nodeside.testing");
450: echo " :</td><td align=left>";
451: if ($row['nsenabled']==1) $nodeside=true;
452: else $nodeside=false;
453: if ($nodeside) $s=" checked";
454: else $s="";
455: echo "<input type=checkbox value=1 name=nsenabled".$s.">";
456: echo " ".hlink("Nodeside");
457: echo "</td></tr>";
458: echo "<input type=hidden name=original_nsenabled value=".$row['nsenabled'].">";
459: 
460: if ($nodeside)
461: 	{
462: 	echo "<tr><td align=right>".$NATS->Lang->Item("node.key")." :</td><td align=left>";
463: 	echo "<input type=text name=nskey value=\"".$row['nskey']."\" size=30 maxlength=120>";
464: 	echo " ".hlink("Nodeside:Key");
465: 	echo "</td></tr>";
466: 	
467: 	echo "<tr><td align=right>".$NATS->Lang->Item("pull.enabled")." :</td>";
468: 	if ($row['nspullenabled']==1) $s=" checked";
469: 	else $s="";
470: 	echo "<td align=left><input type=checkbox name=nspullenabled value=1".$s."> ";
471: 	echo hlink("Nodeside:PullEnabled");
472: 	echo "</td></tr>";
473: 	
474: 	echo "<tr><td align=right>".$NATS->Lang->Item("pull.url")." :</td><td align=left>";
475: 	echo "<input type=text name=nsurl value=\"".$row['nsurl']."\" size=30 maxlength=250>";
476: 	if ($row['nsurl']!="")
477: 		{
478: 		$uri=$row['nsurl']."?nodekey=".$row['nskey']."&noupdates=1";
479: 		echo " <a href=\"".$uri."\" target=top><i>".$NATS->Lang->Item("debug.raw")."</i></a>";
480: 		}
481: 	echo " ".hlink("Nodeside:URL");
482: 	echo "</td></tr>";
483: 	
484: 	echo "<tr><td align=right>".$NATS->Lang->Item("pull.interval")." :</td><td align=left>";
485: 	echo "<input type=text name=nsinterval value=\"".$row['nsinterval']."\" size=2 maxlength=10>";
486: 	echo " ".$NATS->Lang->Item("minutes")." ".hlink("Nodeside:Interval");
487: 	echo "</td></tr>";
488: 	
489: 	echo "<tr><td align=right>".$NATS->Lang->Item("push.enabled")." :</td>";
490: 	if ($row['nspushenabled']==1) $s=" checked";
491: 	else $s="";
492: 	echo "<td align=left><input type=checkbox name=nspushenabled value=1".$s."> ";
493: 	echo hlink("Nodeside:PushEnabled");
494: 	echo "</td></tr>";
495: 	
496: 	echo "<tr><td align=right>".$NATS->Lang->Item("push.ip")." :</td><td align=left>";
497: 	echo "<input type=text name=nspuship value=\"".$row['nspuship']."\" size=20 maxlength=120>";
498: 	echo " ".hlink("Nodeside:PushIP");
499: 	echo "</td></tr>";
500: 	
501: 	echo "<tr><td align=right>".$NATS->Lang->Item("last.data")." :</td><td align=left>";
502: 	echo nicedt($row['nslastx'])." - ".dtago($row['nslastx'])."</td></tr>";
503: 	
504: 	if ($row['nspullenabled']==1)
505: 		{
506: 		echo "<tr><td align=right>".$NATS->Lang->Item("next.pull.due")." :</td><td align=left>";
507: 		if ($row['nsnextx']>0) echo nicedt($row['nsnextx'])." - ".nicenextx($row['nsnextx']);
508: 		else echo $NATS->Lang->Item("now");
509: 		echo "</td></tr>";
510: 		}
511: 	
512: 	echo "<tr><td align=right>".$NATS->Lang->Item("catalogue")." :</td><td align=left>";
513: 	$nsq="SELECT COUNT(nstestid) FROM fnnstest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\"";
514: 	$nsr=$NATS->DB->Query($nsq);
515: 	if ($nsrow=$NATS->DB->Fetch_Array($nsr))
516: 		{
517: 		echo $nsrow['COUNT(nstestid)']." ".$NATS->Lang->Item("nodeside.monitors");
518: 		}
519: 	$NATS->DB->Free($nsr);
520: 	echo "</td></tr>";
521: 	
522: 	echo "<tr><td align=right>".$NATS->Lang->Item("refresh.now").":</td><td align=left>";
523: 	if ($row['nspullenabled']==1) echo "<a href=node.edit.php?nodeid=".$_REQUEST['nodeid']."&action=nodesiderefresh>".$NATS->Lang->Item("nodeside.pull.now")."</a>";
524: 	else echo "<i>".$NATS->Lang->Item("nodeside.pull.disabled")."</i>";
525: 	echo "</td></tr>";
526: 
527: 	}
528: 
529: echo "<tr><td colspan=2><hr class=\"nspacer\"></td></tr>";
530: 
531: // New Utility Links
532: //if ($NATS->Cfg->Get("dev.links",0)==1) // ABOVE AS WELL!!
533: //{ 
534: echo "<tr><td align=right valign=top>".$NATS->Lang->Item("utility.links")." ".hlink("UtilLinks",12)." :</td><td align=left>";
535: echo "<table width=100% border=0 cellspacing=0 cellpadding=0>";
536: echo "<tr><td>&nbsp;</td><td>".$NATS->Lang->Item("title")."</td><td>".$NATS->Lang->Item("url")." </td></tr>";
537: for ($a=0; $a<3; $a++) // auto loop through them
538: 	{
539: 	$ulink="ulink".$a;
540: 	$utitle=$ulink."_title";
541: 	$uurl=$ulink."_url";
542: 	echo "<tr><td>";
543: 	if ($row[$ulink]) $s=" checked";
544: 	else $s="";
545: 	echo "<input type=checkbox name=".$ulink." value=1".$s.">";
546: 	echo "</td><td>";
547: 	echo "<input type=text name=".$utitle." value=\"".$row[$utitle]."\" size=10>";
548: 	echo "</td><td>";
549: 	echo "<input type=text name=".$uurl." value=\"".$row[$uurl]."\" size=25>";
550: 	echo "</td></tr>\n";
551: 	}
552: echo "</table>";
553: echo "</td></tr>";
554: 
555: 
556: echo "<tr><td colspan=2><hr class=\"nspacer\"></td></tr>";
557: //}
558: 
559: 
560: echo "<tr><td colspan=2>";
561: echo "<input type=submit value=\"".$NATS->Lang->Item("save.settings")."\"> <a href=main.php>".$NATS->Lang->Item("cancel")."</a>";
562: echo "<br><br>";
563: echo "</td></tr>";
564: echo "</table>";
565: echo "</div></form>";
566: echo "<i><a href=\"javascript:showOptions()\">".$NATS->Lang->Item("show.hide.options")."</a></i>";
567: echo "<script type=\"text/javascript\">\n";
568: if (!isset($_REQUEST['showoptions'])) echo "showOptions();\n";
569: echo "</script>\n";
570: End_Round();
571: 
572: if (isset($_REQUEST['show_icons']))
573: 	{
574: 	echo "<br><br>";
575: 	ShowIcons();
576: 	echo "<br><br>";
577: 	}
578: 	
579: //echo "<div id=\"iconDiv\"></div>";
580: 
581: echo "<br><br>";
582: $title="<b class=\"sectitle\">".$NATS->Lang->Item("node.tests")."</b>";
583: Start_Round($title,600);
584: echo "<table class=\"nicetable\" width=100%>";
585: $q="SELECT * FROM fnlocaltest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND testtype!=\"ICMP\" ORDER BY localtestid ASC";
586: $r=$NATS->DB->Query($q);
587: while ($row=$NATS->DB->Fetch_Array($r))
588: 	{
589: 	echo "<tr><td>";
590: 	
591: 	echo "<b class=\"al".$row['alertlevel']."\">";
592: 	if (strlen($row['testparam'])>10) $tp=substr($row['testparam'],0,8)."..";
593: 	else $tp=$row['testparam'];
594: 	if ($row['testname']=="") echo lText($row['testtype'])." (".$tp.")";
595: 	else echo $row['testname'];
596: 	echo "</b>";
597: 	echo "</td>";
598: 
599: 	echo "<td>&nbsp;<a href=localtest.edit.php?localtestid=".$row['localtestid'].">";
600: 	echo "<img src=images/options/application.png border=0 title=\"".$NATS->Lang->Item("edit.options")."\"></a>&nbsp;";
601: 	echo "<a href=localtest.action.php?action=delete&localtestid=".$row['localtestid'].">";
602: 	echo "<img src=images/options/action_delete.png border=0 title=\"".$NATS->Lang->Item("delete")."\"></a>";
603: 
604: 	echo "&nbsp;&nbsp;<i>".$NATS->Lang->Item("last.tested").": ".dtago($row['lastrunx'])."</i>";	
605: 	echo "</td></tr>";
606: 	}
607: 	
608: if ($nodeside)
609: 	{
610: 	$q="SELECT * FROM fnnstest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND testenabled=1 ORDER BY testtype";
611: 	$r=$NATS->DB->Query($q);
612: 	while ($row=$NATS->DB->Fetch_Array($r))
613: 		{
614: 		echo "<tr><td>";
615: 		
616: 		echo "<b class=\"al".$row['alertlevel']."\">";
617: 		if ($row['testname']=="") echo $row['testdesc'];
618: 		else echo $row['testname'];
619: 		echo "</b>";
620: 		echo "</td>";
621: 	
622: 		echo "<td>&nbsp;<a href=nodeside.edit.php?nstestid=".$row['nstestid'].">";
623: 		echo "<img src=images/options/application.png border=0 title=\"".$NATS->Lang->Item("edit.options")."\"></a>&nbsp;";
624: 		echo "<a href=nodeside.edit.php?action=disable&nstestid=".$row['nstestid']."&nodeid=".$_REQUEST['nodeid'].">";
625: 		echo "<img src=images/options/action_delete.png border=0 title=\"".$NATS->Lang->Item("delete")."\"></a>";
626: 	
627: 		echo "&nbsp;&nbsp;<i>".$NATS->Lang->Item("last.tested").": ".dtago($row['lastrunx'])."</i>";	
628: 		echo "</td></tr>";	
629: 		}
630: 	$NATS->DB->Free($r);
631: 	}	
632: 
633: echo "<form action=localtest.action.php method=post><input type=hidden name=action value=create>";
634: echo "<input type=hidden name=nodeid value=\"".$_REQUEST['nodeid']."\">\n";
635: echo "<tr><td colspan=2>&nbsp;<br></td></tr>";
636: echo "<tr><td><b>".$NATS->Lang->Item("add.test")." :</b></td>";
637: echo "<td><select name=testtype>";
638: echo "<option value=wtime>".$NATS->Lang->Item("web.time")."</option>";
639: 
640: echo "<option value=wsize>".$NATS->Lang->Item("web.size")."</option><option value=ping>".$NATS->Lang->Item("remote.ping")."</option>";
641: 
642: echo "<option value=host>".$NATS->Lang->Item("dns.host")."</option>";
643: 
644: // New Test Manager List
645: foreach($NATS->Tests->QuickList as $key => $val)
646: 	{
647: 	echo "<option value=".$key.">".$val."</option>";
648: 	}
649: echo "<option value=testrand>".$NATS->Lang->Item("test.random")."</option><option value=testloop>".$NATS->Lang->Item("test.loop")."</option>";
650: echo "</select> ";
651: 
652: // one day will do fancy JS option here but for now moved to the edit
653: //echo "<input type=text name=testparam size=20 maxlength=128> ";
654: echo "<input type=hidden name=testparam value=\"\">";
655: echo "<input type=hidden name=testcreatedisabled value=1>";
656: 
657: echo "<input type=submit value=\"".$NATS->Lang->Item("create.test")."\">";
658: echo "</td></tr></form>";
659: 
660: if ($nodeside)
661: 	{
662: 	echo "<form action=nodeside.edit.php method=post><input type=hidden name=action value=enable>";
663: 	echo "<input type=hidden name=nodeid value=".$_REQUEST['nodeid'].">";
664: 	echo "<tr><td><b>".$NATS->Lang->Item("add.nodeside")." :</b></td>";
665: 	echo "<td><select name=nstestid>";
666: 	$nsq="SELECT nstestid,testtype,testdesc FROM fnnstest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND testenabled=0 ORDER BY testtype";
667: 	$nsr=$NATS->DB->Query($nsq);
668: 	while ($nsrow=$NATS->DB->Fetch_Array($nsr))
669: 		{
670: 		echo "<option value=".$nsrow['nstestid'].">";
671: 		if ($nsrow['testdesc']=="") echo $nsrow['testtype'];
672: 		else echo $nsrow['testdesc']."</option>";
673: 		}
674: 	echo "</select>";
675: 	echo " <input type=submit value=\"".$NATS->Lang->Item("add")."\">";
676: 	echo "</td></tr></form>";
677: 	}
678: 
679: echo "</table>";
680: End_Round();
681: echo "<br><br>";
682: 
683: $title="<b class=\"sectitle\">".$NATS->Lang->Item("alert.actions")."</b> ".hlink("AlertAction",12);
684: Start_Round($title,600);
685: echo "<table border=0><form action=node.edit.php>";
686: echo "<input type=hidden name=nodeid value=".$_REQUEST['nodeid'].">";
687: echo "<input type=hidden name=action value=save_actions>";
688: $q="SELECT aaid,aname FROM fnalertaction";
689: $r=$NATS->DB->Query($q);
690: $c=0;
691: while ($row=$NATS->DB->Fetch_Array($r))
692: 	{
693: 	// has link?
694: 	$lq="SELECT nalid FROM fnnalink WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND aaid=".ss($row['aaid'])." LIMIT 0,1";
695: 	$lr=$NATS->DB->Query($lq);
696: 	if ($NATS->DB->Num_Rows($lr)>0) $s=" checked";
697: 	else $s="";
698: 	$NATS->DB->Free($lr);
699: 	echo "<tr><td><input type=checkbox name=\"links[".$c++."]\" value=\"".$row['aaid']."\"".$s.">";
700: 	echo "</td><td>".$row['aaid']." - ".$row['aname']."</td></tr>";
701: 	}
702: $NATS->DB->Free($r);
703: echo "<tr><td colspan=\"2\"><input type=submit value=\"".$NATS->Lang->Item("update.alert.actions")."\"></td></tr>";
704: echo "</form></table>";
705: End_Round();
706: ?>
707: <br><br>
708: 
709: <?php
710: Screen_Footer();
711: ?>
712: