File: 0.03.00a/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 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("Edit Node");
 32: ob_end_flush();
 33: Screen_Header("Node Editor",1);
 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 "document.getElementById('iconDiv').innerHTML='<br><br>'+iconDivText+'<br><br>';\n";
 41: echo "}\n";
 42: echo "</script>\n\n";
 43: ?>
 44: <br>
 45: <?php
 46: if (isset($_REQUEST['action']))
 47: 	{
 48: 	if ($_REQUEST['action']=="save_edit")
 49: 		{
 50: 		if (isset($_REQUEST['nodeenabled'])) $nodeenabled=1;
 51: 		else $nodeenabled=0;
 52: 		if (isset($_REQUEST['pingtest'])) $pingtest=1;
 53: 		else $pingtest=0;
 54: 		if (isset($_REQUEST['pingfatal'])) $pingfatal=1;
 55: 		else $pingfatal=0;
 56: 		if (isset($_REQUEST['nodealert'])) $nodealert=1;
 57: 		else $nodealert=0;
 58: 		
 59: 		$q="UPDATE fnnode SET ";
 60: 		$q.="nodename=\"".ss($_REQUEST['nodename'])."\",";
 61: 		$q.="nodedesc=\"".ss($_REQUEST['nodedesc'])."\",";
 62: 		if (isset($_REQUEST['scheduleid'])) $q.="scheduleid=".ss($_REQUEST['scheduleid']).",";
 63: 		$q.="nodeicon=\"".ss($_REQUEST['nodeicon'])."\",";
 64: 		$q.="nodealert=".ss($nodealert).",";
 65: 		$q.="nodeenabled=".ss($nodeenabled).",pingtest=".ss($pingtest).",pingfatal=".ss($pingfatal).",";
 66: 		$q.="hostname=\"".ss($_REQUEST['hostname'])."\"";
 67: 		
 68: 		$q.=" WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\"";
 69: 		//echo $q;
 70: 		$NATS->DB->Query($q);
 71: 		
 72: 		if ($NATS->DB->Affected_Rows()<=0) 
 73: 			{
 74: 			echo "<b style=\"color: red;\">Failed to Save Changes or Nothing Changed</b><br>";
 75: 			$poplist[]="Failed to Save or Nothing Changed";
 76: 			}
 77: 		else 
 78: 			{
 79: 			echo "<b style=\"color: green;\">Saved Changes</b><br>";
 80: 			$poplist[]="Saved Changes";
 81: 			}
 82: 		}
 83: 	else if ($_REQUEST['action']=="save_actions")
 84: 		{
 85: 		// build the two lists...
 86: 		$cur=array();
 87: 		$cc=0;
 88: 		$nl=array();
 89: 		$nc=0;
 90: 		
 91: 		if (isset($_REQUEST['links']))
 92: 			{
 93: 			foreach($_REQUEST['links'] as $link)
 94: 				{
 95: 				$nl[$link]['proc']=false; // not processed or existing i.e. outstanding
 96: 				$nl[$link]['aaid']=$link;
 97: 				$nc++;
 98: 				}
 99: 			}
100: 			
101: 		$q="SELECT nalid,aaid FROM fnnalink WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\"";
102: 		$r=$NATS->DB->Query($q);
103: 		while ($row=$NATS->DB->Fetch_Array($r))
104: 			{
105: 			//echo $row['aaid'].":";
106: 			$cur[$row['aaid']]['proc']=false;
107: 			$cur[$row['aaid']]['nalid']=$row['nalid'];
108: 			$cur[$row['aaid']]['aaid']=$row['aaid'];
109: 			$cc++;
110: 			}
111: 		
112: 		// now we have the two lists lets process them
113: 		foreach($nl as $newone)
114: 			{
115: 			if (isset($cur[$newone['aaid']])) // exists - do nothing to both
116: 				{
117: 				//echo "<br>".$newone['aaid'].":";
118: 				$cur[$newone['aaid']]['proc']=true;
119: 				$nl[$newone['aaid']]['proc']=true;
120: 				}
121: 			// otherwise news are left false to insert and curs false to delete
122: 			}
123: 			
124: 		// so lets do that
125: 		foreach($nl as $newone)
126: 			{
127: 			if ($newone['proc']==false)
128: 				{
129: 				//echo $q;
130: 				$q="INSERT INTO fnnalink(aaid,nodeid) VALUES(".ss($newone['aaid']).",\"".ss($_REQUEST['nodeid'])."\")";
131: 				$NATS->DB->Query($q);
132: 				}
133: 			}
134: 		foreach($cur as $curone)
135: 			{
136: 			if ($curone['proc']==false)
137: 				{
138: 				$q="DELETE FROM fnnalink WHERE nalid=".$curone['nalid'];
139: 				$NATS->DB->Query($q);
140: 				//echo $q;
141: 				}
142: 			}
143: 			
144: 		echo "<b>Saved Alert List Preferences</b><br>";
145: 		$poplist[]="Saved Alert List Preferences";
146: 		
147: 			
148: 		}
149: 		
150: 	}
151: 		
152: 
153: 
154: echo "<b class=\"subtitle\">Editing Node: <a href=node.php?nodeid=".$_REQUEST['nodeid'].">".$_REQUEST['nodeid']."</a></b><br><br>";
155: 
156: $q="SELECT * FROM fnnode WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" LIMIT 0,1";
157: $r=$NATS->DB->Query($q);
158: if (!$row=$NATS->DB->Fetch_Array($r))
159: 	{
160: 	echo "No such node.<br><br>";
161: 	Screen_Footer();
162: 	exit();
163: 	}
164: $NATS->DB->Free($r);
165: 
166: echo "<table border=0>";
167: echo "<form action=node.edit.php method=post>";
168: echo "<input type=hidden name=action value=save_edit>";
169: echo "<input type=hidden name=nodeid value=".$_REQUEST['nodeid'].">";
170: echo "<tr><td colspan=2><b class=\"sectitle\">Node Settings</b><br><br></td>";
171: 
172: echo "<tr><td align=right>
173: NodeID
174: :</td><td align=left>";
175: echo $row['nodeid'];
176: echo "</td></tr>";
177: 
178: echo "<tr><td align=right>
179: Node Name
180: :</td><td align=left>";
181: echo "<input type=text name=nodename size=20 maxlength=128 value=\"".$row['nodename']."\">";
182: echo "</td></tr>";
183: 
184: echo "<tr><td align=right>
185: Hostname
186: :</td><td align=left>";
187: echo "<input type=text name=hostname size=20 maxlength=128 value=\"".$row['hostname']."\">";
188: echo "</td></tr>";
189: 
190: echo "<tr><td align=right>
191: Description
192: :</td><td align=left>";
193: echo "<input type=text name=nodedesc size=30 maxlength=200 value=\"".$row['nodedesc']."\">";
194: echo "</td></tr>";
195: 
196: echo "<tr><td align=right>
197: Node Icon
198: :</td><td align=left>";
199: echo "<select name=nodeicon>";
200: if ($row['nodeicon']!="") echo "<option value=\"".$row['nodeicon']."\">".$row['nodeicon']."</option>";
201: echo "<option value=\"\">Default</option>";
202: foreach($fnIcons as $icon)
203: 	echo "<option value=\"".$icon."\">".$icon."</option>";
204: //echo "</select> [ <a href=node.edit.php?nodeid=".$_REQUEST['nodeid']."&show_icons=1>Show Icons</a> ]";
205: echo "</select> [ <a href=\"javascript:showIcons()\">Show Icons</a> ]";
206: echo "</td></tr>";
207: 
208: echo "<tr><td align=right>
209: Test Schedule
210: :</td><td align=left>";
211: echo "<select name=scheduleid>";
212: echo "<option value=0>At All Times</option>";
213: $sq="SELECT scheduleid,schedulename FROM fnschedule";
214: $sr=$NATS->DB->Query($sq);
215: while ($sched=$NATS->DB->Fetch_Array($sr))
216: 	{
217: 	if ($sched['scheduleid']==$row['scheduleid']) $s.=" selected";
218: 	else $s="";
219: 	echo "<option value=".$sched['scheduleid'].$s.">".$sched['schedulename']."</option>";
220: 	}
221: echo "</select>";
222: $NATS->DB->Free($sr);
223: echo " ".hlink("Schedule");
224: echo "</td></tr>";
225: 
226: echo "<tr><td align=right>
227: Enabled
228: :</td><td align=left>";
229: if ($row['nodeenabled']==1) $s=" checked";
230: else $s="";
231: echo "<input type=checkbox value=1 name=nodeenabled".$s.">";
232: echo " ".hlink("Node:Enabled");
233: echo "</td></tr>";
234: 
235: echo "<tr><td align=right>
236: Alerts Active
237: :</td><td align=left>";
238: if ($row['nodealert']==1) $s=" checked";
239: else $s="";
240: echo "<input type=checkbox value=1 name=nodealert".$s.">";
241: echo " ".hlink("Node:AlertActive");
242: echo "</td></tr>";
243: 
244: echo "<tr><td align=right>
245: Ping Test
246: :</td><td align=left>";
247: if ($row['pingtest']==1) $s=" checked";
248: else $s="";
249: echo "<input type=checkbox value=1 name=pingtest".$s.">";
250: echo " ".hlink("Node:PingTest");
251: echo "</td></tr>";
252: 
253: echo "<tr><td align=right>
254: Require Ping
255: :</td><td align=left>";
256: if ($row['pingfatal']==1) $s=" checked";
257: else $s="";
258: echo "<input type=checkbox value=1 name=pingfatal".$s.">";
259: echo " ".hlink("Node:RequirePing");
260: echo "</td></tr>";
261: 
262: echo "<tr><td colspan=2>";
263: echo "<input type=submit value=\"Save Node Settings\"> <a href=main.php>Cancel Changes</a>";
264: echo "<br><br>";
265: echo "</td></tr>";
266: echo "</form>";
267: 
268: if (isset($_REQUEST['show_icons']))
269: 	{
270: 	echo "<tr><td colspan=2 align=left valign=top><br><br>";
271: 	ShowIcons();
272: 	echo "<br><br></td></tr>";
273: 	}
274: 	
275: echo "<tr><td colspan=2 align=left valign=top><div id=\"iconDiv\"></div></td></tr>";
276: 
277: 
278: echo "<tr><td colspan=2><br><b class=\"sectitle\">Node Tests</b><br><br></td></tr>";
279: 
280: $q="SELECT * FROM fnlocaltest WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND testtype!=\"ICMP\"";
281: $r=$NATS->DB->Query($q);
282: while ($row=$NATS->DB->Fetch_Array($r))
283: 	{
284: 	echo "<tr style=\"border-bottom: dotted 1px #e0e0e0;\"><td style=\"border-bottom: dotted 1px #e0e0e0;\">";
285: 	
286: 	echo "<b class=\"al".$row['alertlevel']."\">";
287: 	if (strlen($row['testparam'])>10) $tp=substr($row['testparam'],0,8)."..";
288: 	else $tp=$row['testparam'];
289: 	if ($row['testname']=="") echo lText($row['testtype'])." (".$tp.")";
290: 	else echo $row['testname'];
291: 	echo "</b>";
292: 	echo "</td>";
293: 
294: 	echo "<td style=\"border-bottom: dotted 1px #e0e0e0;\"><a href=localtest.edit.php?localtestid=".$row['localtestid'].">Edit</a> | ";
295: 	echo "<a href=localtest.action.php?action=delete&localtestid=".$row['localtestid'].">Delete</a>";
296: 
297: 	echo "&nbsp;&nbsp;<i>Last Tested: ".dtago($row['lastrunx'])."</i>";	
298: 	echo "</td></tr>";
299: 	}
300: 
301: echo "<form action=localtest.action.php method=post><input type=hidden name=action value=create>";
302: echo "<input type=hidden name=nodeid value=\"".$_REQUEST['nodeid']."\">\n";
303: echo "<tr><td colspan=2>&nbsp;<br></td></tr>";
304: echo "<tr><td><b>Add Test :</b></td>";
305: echo "<td><select name=testtype>";
306: echo "<option value=wtime>Web Time</option><option value=tcp>TCP Port</option>";
307: echo "<option value=wsize>Web Size</option><option value=ping>Remote Ping</option>";
308: echo "<option value=testrand>Test Random</option><option value=testloop>Test Loop</option>";
309: echo "</select> <input type=text name=testparam size=20 maxlength=128> ";
310: echo "<input type=submit value=\"Add\">";
311: echo "</td></tr></form>";
312: 
313: 
314: echo "</table>";
315: 
316: echo "<br><br><b class=\"sectitle\">Alert Actions</b><br><br>";
317: echo "<table border=0><form action=node.edit.php>";
318: echo "<input type=hidden name=nodeid value=".$_REQUEST['nodeid'].">";
319: echo "<input type=hidden name=action value=save_actions>";
320: $q="SELECT aaid,aname FROM fnalertaction";
321: $r=$NATS->DB->Query($q);
322: $c=0;
323: while ($row=$NATS->DB->Fetch_Array($r))
324: 	{
325: 	// has link?
326: 	$lq="SELECT nalid FROM fnnalink WHERE nodeid=\"".ss($_REQUEST['nodeid'])."\" AND aaid=".ss($row['aaid'])." LIMIT 0,1";
327: 	$lr=$NATS->DB->Query($lq);
328: 	if ($NATS->DB->Num_Rows($lr)>0) $s=" checked";
329: 	else $s="";
330: 	$NATS->DB->Free($lr);
331: 	echo "<tr><td><input type=checkbox name=\"links[".$c++."]\" value=\"".$row['aaid']."\"".$s.">";
332: 	echo "</td><td>".$row['aaid']." - ".$row['aname']."</td></tr>";
333: 	}
334: $NATS->DB->Free($r);
335: echo "<tr><td colspan=\"2\"><input type=submit value=\"Update Alert Actions\"></td></tr>";
336: echo "</form></table>";
337: ?>
338: 
339: 
340: <?php
341: Screen_Footer();
342: ?>
343: