File: 1.10.1a/server/web/admin.php (View as HTML)

  1: <?php
  2: /* -------------------------------------------------------------
  3: This file is part of FreeNATS
  4: 
  5: FreeNATS is (C) Copyright 2008-2010 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<9) UL_Error($NATS->Lang->Item("admin.interface"));
 32: 
 33: if (isset($_REQUEST['action']))
 34: 	{
 35: 	switch($_REQUEST['action'])
 36: 		{
 37: 		case "save_user":
 38: 		$q="UPDATE fnuser SET realname=\"".ss($_REQUEST['realname'])."\",userlevel=".ss($_REQUEST['userlevel']);
 39: 		if ((isset($_REQUEST['pword']))&&($_REQUEST['pword']!="_NOTTHIS_")) $q.=",password=MD5(\"".ss($_REQUEST['pword'])."\")";
 40: 		$q.=" WHERE username=\"".ss($_REQUEST['username'])."\"";
 41: 		$NATS->DB->Query($q);
 42: 		if ($NATS->DB->Affected_Rows()<=0) $amsg=$NATS->Lang->Item("save.user.fail");
 43: 		else $amsg=$NATS->Lang->Item("save.user.ok");
 44: 		break;
 45: 		
 46: 		case "create_user":
 47: 		$q="INSERT INTO fnuser(username,password,realname,userlevel) VALUES(\"".ss($_REQUEST['username'])."\",";
 48: 		$q.="MD5(\"".ss($_REQUEST['pword'])."\"),\"".ss($_REQUEST['realname'])."\",".ss($_REQUEST['userlevel']).")";
 49: 		$NATS->DB->Query($q);
 50: 		//echo $q;
 51: 		if ($NATS->DB->Affected_Rows()<=0) $amsg=$NATS->Lang->Item("create.user.fail");
 52: 		else $amsg=$NATS->Lang->Item("create.user.ok");
 53: 		break;
 54: 		
 55: 		case "delete_user": 
 56: 		/* - disabled for 0.02.44 to allow duplicate deletion
 57: 		if ($_REQUEST['username']=="admin")
 58: 			{
 59: 			$amsg="Can't delete the admin user";
 60: 			break;
 61: 			}
 62: 		*/
 63: 		if (!isset($_REQUEST['confirmed']))
 64: 			{
 65: 			$back=urlencode("admin.php?action=delete_user&mode=users&username=".$_REQUEST['username']."&confirmed=1");
 66: 			$url="confirm.php?action=".urlencode($NATS->Lang->Item("delete.user"))."+".$_REQUEST['username']."&back=".$back;
 67: 			header("Location: ".$url);
 68: 			exit();
 69: 			}
 70: 		$q="DELETE FROM fnuser WHERE username=\"".ss($_REQUEST['username'])."\"";
 71: 		$NATS->DB->Query($q);
 72: 		$amsg=$_REQUEST['username'].$NATS->Lang->Item("user.deleted");
 73: 		break;
 74: 		
 75: 		case "var_save":
 76: 		if ($_REQUEST['new_var']=="") // delete
 77: 			{
 78: 			$q="DELETE FROM fnconfig WHERE fnc_var=\"".ss($_REQUEST['orig_var'])."\"";
 79: 			}
 80: 		else // update
 81: 			{
 82: 			$q="UPDATE fnconfig SET fnc_var=\"".ss($_REQUEST['new_var'])."\",fnc_val=\"".ss($_REQUEST['new_val'])."\" ";
 83: 			$q.="WHERE fnc_var=\"".ss($_REQUEST['orig_var'])."\"";
 84: 			}
 85: 		$NATS->DB->Query($q);
 86: 		if ($NATS->DB->Affected_Rows()<=0) $amsg=$NATS->Lang->Item("save.var.fail");
 87: 		else $amsg=$NATS->Lang->Item("save.var.ok");
 88: 		break;
 89: 		case "var_new":
 90: 		$q="INSERT INTO fnconfig(fnc_var,fnc_val) VALUES(\"".ss($_REQUEST['new_var'])."\",\"".ss($_REQUEST['new_val'])."\")";
 91: 		//echo $q;
 92: 		$NATS->DB->Query($q);
 93: 		if ($NATS->DB->Affected_Rows()<=0) $amsg=$NATS->Lang->Item("new.var.fail");
 94: 		else $amsg=$NATS->Lang->Item("new.var.ok");
 95: 		break;
 96: 		
 97: 		case "save_aa":
 98: 		$q="UPDATE fnalertaction SET ";
 99: 		$q.="atype=\"".ss($_REQUEST['atype'])."\",";
100: 		$q.="ctrlimit=".ss($_REQUEST['ctrlimit']).",";
101: 		$q.="ctrtoday=".ss($_REQUEST['ctrtoday']).",";
102: 		$q.="aname=\"".ss($_REQUEST['aname'])."\",";
103: 		$q.="scheduleid=".ss($_REQUEST['scheduleid']).",";
104: 		if (isset($_REQUEST['efrom'])) $q.="efrom=\"".ss($_REQUEST['efrom'])."\",";
105: 		$q.="etolist=\"".ss($_REQUEST['etolist'])."\",";
106: 		if (isset($_REQUEST['esubject'])) $q.="esubject=".ss($_REQUEST['esubject']).",";
107: 		$q.="etype=".ss($_REQUEST['etype']);
108: 		if (isset($_REQUEST['awarnings'])) $q.=",awarnings=".ss($_REQUEST['awarnings']);
109: 		else $q.=",awarnings=0";
110: 		if (isset($_REQUEST['adecrease'])) $q.=",adecrease=".ss($_REQUEST['adecrease']);
111: 		else $q.=",adecrease=0";
112: 		$q.=" WHERE aaid=".ss($_REQUEST['aaid']);
113: 		//echo $q;
114: 		$NATS->DB->Query($q);
115: 		if ($NATS->DB->Affected_Rows()<=0) $NATS->Lang->Item("changes.fail");
116: 		else $amsg=$NATS->Lang->Item("changes.ok");
117: 		break;
118: 		
119: 		case "action_test":
120: 		$q="SELECT mdata FROM fnalertaction WHERE aaid=".ss($_REQUEST['aaid'])." LIMIT 0,1";
121: 		$r=$NATS->DB->Query($q);
122: 		$row=$NATS->DB->Fetch_Array($r);
123: 		$oldm=$row['mdata'];
124: 		$q="UPDATE fnalertaction SET mdata=\"** ACTION TEST **\" WHERE aaid=".ss($_REQUEST['aaid']);
125: 		$NATS->DB->Query($q);
126: 		$NATS->ActionFlush();
127: 		$q="UPDATE fnalertaction SET mdata=\"".ss($oldm)."\" WHERE aaid=".ss($_REQUEST['aaid']);
128: 		$NATS->DB->Query($q);
129: 		$amsg=$NATS->Lang->Item("aa.testflush");
130: 		break;
131: 		
132: 		case "action_create":
133: 		$q="INSERT INTO fnalertaction(atype) VALUES(\"\")";
134: 		$NATS->DB->Query($q);
135: 		$amsg=$NATS->Lang->Item("changes.ok");
136: 		$_REQUEST['aaid']=$NATS->DB->Insert_Id();
137: 		break;
138: 		
139: 		case "action_delete":
140: 		if (!isset($_REQUEST['confirmed']))
141: 			{
142: 			$back=urlencode("admin.php?mode=alertactions&aaid_del=".$_REQUEST['aaid_del']."&action=action_delete&confirmed=1");
143: 			$url="confirm.php?action=".urlencode($NATS->Lang->Item("aa.delete"))."&back=".$back;
144: 			header("Location: ".$url);
145: 			exit();
146: 			}
147: 		// otherwise confirmed
148: 		$q="DELETE FROM fnalertaction WHERE aaid=".ss($_REQUEST['aaid_del']);
149: 		$NATS->DB->Query($q);
150: 		if ($NATS->DB->Affected_Rows()>0) $amsg=$NATS->Lang->Item("changes.ok");
151: 		else $amsg=$NATS->Lang->Item("changes.fail");
152: 		$q="DELETE FROM fnnalink WHERE aaid=".ss($_REQUEST['aaid_del']);
153: 		$NATS->DB->Query($q);
154: 		break;
155: 		
156: 		case "optimize":
157: 		$q="OPTIMIZE TABLE ".ss($_REQUEST['table']);
158: 		$NATS->DB->Query($q);
159: 		$amsg=$NATS->Lang->Item("optimised.ok")." ".$_REQUEST['table'];
160: 		break;
161: 		
162: 		}
163: 	}
164: 
165: ob_end_flush();
166: Screen_Header($NATS->Lang->Item("admin.interface"),1,1,"","main","admin");
167: 
168: if (isset($_REQUEST['mode'])) $mode=$_REQUEST['mode'];
169: else $mode="";
170: 
171: if (isset($_REQUEST['message'])) echo "<br><b>".$_REQUEST['message']."</b><br>";
172: if (isset($amsg)) echo "<br><b>".$amsg."</b><br>";
173: 
174: echo "<br>";
175: if (isset($_REQUEST['updatecheck']))
176: 	{
177: 	// check for updates
178: 	$dq="?CheckVersion=".$NATS->Version."&JSMode=1";
179: 	$dl="http://www.purplepixie.org/freenats/download.php";
180: 	$du=$dl.$dq;
181: 	/* old method
182: 	$cp=@fopen($du,"r");
183: 	if ($cp>0)
184: 		{
185: 		$cs=@fgets($cp,128);
186: 		@fclose($cp);
187: 		if ($cs=="0") echo "System Up to Date<br>";
188: 		else echo "Update Available: <a href=http://www.purplepixie.org/freenats>".$cs."</a><br>";
189: 		}
190: 	else echo "Error Checking for Updates<br>";
191: 	*/
192: 	echo $NATS->Lang->Item("checking.updates").": ";
193: 	echo "<script type=\"text/javascript\" src=\"".$du."\"></script>\n";
194: 	echo "<br><br>";
195: 	}
196: else if ($mode=="")
197: 	{
198: 	echo "<a href=admin.php?updatecheck=1><b>".$NATS->Lang->Item("check.updates")."</b></a><br><br>";
199: 	}
200: 	
201: function tul($l)
202: {
203: global $NATS;
204: if ($l>9) return $NATS->Lang->Item("ul.admin");
205: if ($l>4) return $NATS->Lang->Item("ul.power");
206: if ($l>0) return $NATS->Lang->Item("ul.normal");
207: return $NATS->Lang->Item("ul.disabled");
208: }
209: 
210: function aat_etype($type)
211: {
212: global $NATS;
213: switch ($type)
214: 	{
215: 	case 0: return $NATS->Lang->Item("aae.short");
216: 	case 1: return $NATS->Lang->Item("aae.long");
217: 	default: return $NATS->Lang->Item("Unknown");
218: 	}
219: }
220: 
221: function aat_esub($type)
222: {
223: global $NATS;
224: switch ($type)
225: 	{
226: 	case 0: return $NATS->Lang->Item("aae.sub.blank");
227: 	case 1: return $NATS->Lang->Item("aae.sub.short");
228: 	case 2: return $NATS->Lang->Item("aae.sub.long");
229: 	default: return $NATS->Lang->Item("unknown");
230: 	}
231: }
232: 
233: function aat_atype($type)
234: {
235: global $NATS;
236: switch($type)
237: 	{
238: 	case "": case "Disabled": return $NATS->Lang->Item("aatype.disabled");
239: 	case "email": return $NATS->Lang->Item("aatype.email");
240: 	case "url": return $NATS->Lang->Item("aatype.url");
241: 	case "mqueue": return $NATS->Lang->Item("aatype.mqueue");
242: 	default: return $NATS->Lang->Item("unknown")." (".$type.")";
243: 	}
244: }
245: 
246: if ($mode=="users")
247: {
248: echo "<b class=\"subtitle\">".$NATS->Lang->Item("user.admin")."</b><br><br>";
249: 
250: 
251: 
252: 
253: $q="SELECT username,realname,userlevel FROM fnuser";
254: $r=$NATS->DB->Query($q);
255: echo "<table border=0>";
256: echo "<tr><td><b>".$NATS->Lang->Item("username")."&nbsp;</b></td>";
257: echo "<td><b>".$NATS->Lang->Item("real.name")."</b></td><td><b>".$NATS->Lang->Item("user.level")."</b></td>";
258: echo "<td><b>".$NATS->Lang->Item("password")."</b></td><td><b>".$NATS->Lang->Item("options")."</b></td></tr>";
259: while ($row=$NATS->DB->Fetch_Array($r))
260: 	{
261: 	echo "<form action=admin.php method=post>";
262: 	echo "<input type=hidden name=action value=save_user>";
263: 	echo "<input type=hidden name=mode value=users>";
264: 	echo "<input type=hidden name=username value=\"".$row['username']."\">";
265: 	echo "<tr><td>".$row['username']."</td>";
266: 	echo "<td><input type=text name=realname value=\"".$row['realname']."\" size=20 maxlength=120></td>";
267: 	echo "<td><select name=userlevel>";
268: 	echo "<option value=".$row['userlevel'].">".tul($row['userlevel'])."</option>";
269: 	echo "<option value=0>".tul(0)."</option>";
270: 	echo "<option value=1>".tul(1)."</option>";
271: 	echo "<option value=5>".tul(5)."</option>";
272: 	echo "<option value=10>".tul(10)."</option>";
273: 	echo "</select>";
274: 	echo "</td>";
275: 	echo "<td><input type=password name=pword value=\"_NOTTHIS_\" size=10 maxlength=128></td>";
276: 	echo "<td><input type=submit value=\"".$NATS->Lang->Item("save")."\"> <a href=admin.php?action=delete_user&username=".$row['username'].">".$NATS->Lang->Item("delete")."</a></td>";
277: 	echo "</tr>";
278: 	echo "</form>";
279: 	}
280: echo "<form action=admin.php method=post>";
281: echo "<input type=hidden name=action value=create_user>";
282: echo "<input type=hidden name=mode value=users>";
283: echo "<tr><td><input type=text name=username size=20 maxlength=60></td>";
284: echo "<td><input type=text name=realname size=20 maxlength=120></td>";
285: echo "<td><select name=userlevel>";
286: echo "<option value=1>".tul(1)."</option>";
287: echo "<option value=0>".tul(0)."</option>";
288: echo "<option value=5>".tul(5)."</option>";
289: echo "<option value=10>".tul(10)."</option>";
290: echo "</select></td>";
291: echo "<td><input type=password name=pword size=10 maxlength=60></td>";
292: echo "<td><input type=submit value=\"".$NATS->Lang->Item("create.user")."\"></td>";
293: echo "</tr></form>";
294: echo "</table><br>";
295: echo "<br>";
296: $NATS->DB->Free($r);
297: }
298: else if ($mode=="nodetestsessions")
299: {
300: echo "<b class=\"subtitle\">".$NATS->Lang->Item("sessions.for")." ".$_REQUEST['nodeid']."</b><br><br>";
301: echo "<b>".$NATS->Lang->Item("sessions.running.for")." ".$_REQUEST['nodeid']."</b><br>";
302: $q="SELECT * FROM fntestrun WHERE fnode=\"".ss($_REQUEST['nodeid'])."\" AND finishx=0 ORDER BY trid DESC";
303: $r=$NATS->DB->Query($q);
304: if ($NATS->DB->Num_Rows($r)==0) echo "<i>".$NATS->Lang->Item("sessions.not.running")."</i><br>";
305: echo "<table border=0>";
306: while ($row=$NATS->DB->Fetch_Array($r))
307: 	{
308: 	echo "<tr><td><a href=testrun.php?trid=".$row['trid'].">run/".$row['trid']."</a></td>";
309: 	echo "<td>".nicedt($row['startx'])." - ";
310: 	if ($row['finishx']>0) echo nicedt($row['finishx']);
311: 	else echo $NATS->Lang->Item("sessions.stillrunning");
312: 	echo " (<a href=log.php?f_entry=Tester+".$row['trid'].">".$NATS->Lang->Item("event.log")."</a>)";
313: 	echo "</td></tr>";
314: 	}
315: echo "</table>";
316: $NATS->DB->Free($r);
317: echo "<br>";
318: echo "<br>";
319: 
320: echo "<b>100 ".$NATS->Lang->Item("sessions.previous")." ".$_REQUEST['nodeid']."</b><br>";
321: $q="SELECT * FROM fntestrun WHERE fnode=\"".ss($_REQUEST['nodeid'])."\" ORDER BY trid DESC LIMIT 0,100";
322: $r=$NATS->DB->Query($q);
323: if ($NATS->DB->Num_Rows($r)==0) echo "<i>".$NATS->Lang->Item("sessions.previous.none")."</i><br>";
324: echo "<table border=0>";
325: while ($row=$NATS->DB->Fetch_Array($r))
326: 	{
327: 	echo "<tr><td><a href=testrun.php?trid=".$row['trid'].">run/".$row['trid']."</a></td>";
328: 	echo "<td>".nicedt($row['startx'])." - ";
329: 	if ($row['finishx']>0) echo nicedt($row['finishx']);
330: 	else echo $NATS->Lang->Item("sessions.stillrunning");
331: 	echo " (<a href=log.php?f_entry=Tester+".$row['trid'].">".$NATS->Lang->Item("event.log")."</a>)";
332: 	echo "</td></tr>";
333: 	}
334: echo "</table>";
335: $NATS->DB->Free($r);
336: echo "<br>";
337: echo "<br>";
338: 
339: }
340: else if ($mode=="testsessions")
341: {
342: echo "<b class=\"subtitle\">".$NATS->Lang->Item("sessions.running")."</b><br><br>";
343: $q="SELECT * FROM fntestrun WHERE finishx=0 ORDER BY trid DESC";
344: $r=$NATS->DB->Query($q);
345: if ($NATS->DB->Num_Rows($r)==0) echo "<i>".$NATS->Lang->Item("sessions.not.running")."</i><br>";
346: echo "<table border=0>";
347: while ($row=$NATS->DB->Fetch_Array($r))
348: 	{
349: 	echo "<tr><td><a href=testrun.php?trid=".$row['trid'].">run/".$row['trid']."</a></td>";
350: 	echo "<td>".nicedt($row['startx'])." - ";
351: 	if ($row['finishx']>0) echo nicedt($row['finishx']);
352: 	else echo $NATS->Lang->Item("sessions.stillrunning");
353: 	echo " (<a href=log.php?f_entry=Tester+".$row['trid'].">".$NATS->Lang->Item("event.log")."</a>)";
354: 	echo "</td></tr>";
355: 	}
356: echo "</table>";
357: $NATS->DB->Free($r);
358: echo "<br>";
359: echo "<form action=admin.php method=post>";
360: echo "<input type=hidden name=mode value=nodetestsessions>";
361: echo "<b>100 ".$NATS->Lang->Item("sessions.previous")." </b>";
362: $q="SELECT nodeid,nodename FROM fnnode ORDER BY weight ASC";
363: $r=$NATS->DB->Query($q);
364: echo "<select name=nodeid>";
365: while ($row=$NATS->DB->Fetch_Array($r))
366: 	{
367: 	echo "<option value=".$row['nodeid'].">".$row['nodename']." (".$row['nodeid'].")</option>";
368: 	}
369: echo "</select> <input type=submit value=Go></form><br>";
370: }
371: else if ($mode=="alertactions")
372: {
373: echo "<b class=\"subtitle\">".$NATS->Lang->Item("alert.actions")."</b><br><br>";
374: 
375: if (isset($_REQUEST['aaid']))
376: 	{ // view/edit aaid
377: 	$q="SELECT * FROM fnalertaction WHERE aaid=".ss($_REQUEST['aaid']);
378: 	$r=$NATS->DB->Query($q);
379: 	if (!$row=$NATS->DB->Fetch_Array($r))
380: 		{
381: 		echo "<b>Error Fetching AAID</b><br><br>";
382: 		Screen_Footer();
383: 		exit();
384: 		}
385: 	echo "<table border=0>";
386: 	echo "<form action=admin.php method=post>";
387: 	echo "<input type=hidden name=action value=save_aa>";
388: 	echo "<input type=hidden name=mode value=alertactions>";
389: 	echo "<input type=hidden name=aaid value=".$_REQUEST['aaid'].">";
390: 	echo "<tr><td>".$NATS->Lang->Item("id")." : </td><td>action/".$_REQUEST['aaid']."</td></tr>";
391: 	
392: 	echo "<tr><td>".$NATS->Lang->Item("aa.name")." : </td>";
393: 	echo "<td>";
394: 	echo "<input type=text name=aname size=30 maxlength=120 value=\"".$row['aname']."\">";
395: 	echo "</td></tr>";
396: 	
397: 	echo "<tr><td>".$NATS->Lang->Item("aa.type")." : </td><td>";
398: 	echo "<select name=atype>";
399: 	echo "<option value=".$row['atype'].">".aat_atype($row['atype'])."</option>";
400: 	echo "<option value=Disabled>Disabled</option>";
401: 	echo "<option value=email>EMail</option>";
402: 	echo "<option value=url>URL</option>";
403: 	echo "<option value=mqueue>Message Queue</option>";
404: 	echo "</select>";
405: 	echo "</td></tr>";
406: 	
407: 	echo "<tr><td>".$NATS->Lang->Item("schedule")." : </td><td>";
408: 	echo "<select name=scheduleid>";
409: 	echo "<option value=0>At All Times</option>";
410: 	$sq="SELECT scheduleid,schedulename FROM fnschedule";
411: 	$sr=$NATS->DB->Query($sq);
412: 	while ($sched=$NATS->DB->Fetch_Array($sr))
413: 		{
414: 		if ($sched['scheduleid']==$row['scheduleid']) $s.=" selected";
415: 		else $s="";
416: 		echo "<option value=".$sched['scheduleid'].$s.">".$sched['schedulename']."</option>";
417: 		}
418: 	echo "</select>";
419: 	$NATS->DB->Free($sr);
420: 	echo " ".hlink("AlertSchedule");
421: 	echo "</td></tr>";
422: 	
423: 	
424: 	echo "<tr><td>".$NATS->Lang->Item("warnings")." : </td>";
425: 	if ($row['awarnings']==1) $s=" checked";
426: 	else $s="";
427: 	echo "<td><input type=checkbox name=awarnings value=1".$s."> ".hlink("AAction:Warnings")."</td></tr>";
428: 	
429: 	echo "<tr><td>".$NATS->Lang->Item("decreases")." : </td>";
430: 	if ($row['adecrease']==1) $s=" checked";
431: 	else $s="";
432: 	echo "<td><input type=checkbox name=adecrease value=1".$s."> ".hlink("AAction:Decreases")."</td></tr>";
433: 	
434: 	echo "<tr><td>".$NATS->Lang->Item("aa.limit")." : </td>";
435: 	echo "<td>";
436: 	echo "<input type=text name=ctrlimit size=3 maxlength=6 value=\"".$row['ctrlimit']."\"> ";
437: 	echo hlink("AAction:Limit");
438: 	echo "</td></tr>";
439: 	
440: 	echo "<tr><td>".$NATS->Lang->Item("aa.counter")." : </td>";
441: 	echo "<td>";
442: 	echo "<input type=text name=ctrtoday size=3 maxlength=6 value=\"".$row['ctrtoday']."\"> ";
443: 	echo hlink("AAction:Counter");
444: 	echo " (for ";
445: 	if ($row['ctrdate']=="") echo "<i>unknown</i>";
446: 	else echo substr($row['ctrdate'],6,2)."/".substr($row['ctrdate'],4,2)."/".substr($row['ctrdate'],0,4);
447: 	echo ")";
448: 	echo "</td></tr>";
449: 	
450: if ($row['atype']!="url")
451: 	{
452: 	
453: 	echo "<tr><td>".$NATS->Lang->Item("aa.efrom")." : </td>";
454: 	echo "<td>";
455: 	echo "<input type=text name=efrom size=30 maxlength=120 value=\"".$row['efrom']."\">";
456: 	echo "</td></tr>";
457: 	
458: 	echo "<tr><td>".$NATS->Lang->Item("aa.esubj")." : </td><td>";
459: 	echo "<select name=esubject>";
460: 	echo "<option value=".$row['esubject'].">".aat_esub($row['esubject'])."</option>";
461: 	echo "<option value=0>Blank</option>";
462: 	echo "<option value=1>Short</option>";
463: 	echo "<option value=2>Long</option>";
464: 	echo "</select>";
465: 	echo "</td></tr>";
466: 	
467: 	}
468: 	
469: 	echo "<tr><td>".$NATS->Lang->Item("aa.mtype")." : </td><td>";
470: 	echo "<select name=etype>";
471: 	echo "<option value=".$row['etype'].">".aat_etype($row['etype'])."</option>";
472: 	echo "<option value=0>Short</option>";
473: 	echo "<option value=1>Long</option>";
474: 	echo "</select>";
475: 	echo "</td></tr>";
476: 	
477: 	echo "<tr><td valign=top>".$NATS->Lang->Item("aa.eto")." : </td><td>";
478: 	echo "<textarea name=etolist cols=40 rows=6>".$row['etolist']."</textarea>";
479: 	echo "</td></tr>";
480: 	
481: 	echo "<tr><td colspan=2><input type=submit value=\"".$NATS->Lang->Item("aa.update")."\"> &nbsp; <a href=admin.php>".$NATS->Lang->Item("aa.cancel")."</a> | ";
482: 	echo "<a href=admin.php?aaid=".$_REQUEST['aaid']."&mode=alertactions&action=action_test>".$NATS->Lang->Item("aa.test")."</a> | ";
483: 	echo "<a href=admin.php?aaid_del=".$_REQUEST['aaid']."&mode=alertactions&action=action_delete>".$NATS->Lang->Item("aa.delete")."</a>";
484: 	echo "</td></tr>";
485: 	
486: 	echo "</form></table><br><br>";
487: 	$NATS->DB->Free($r);
488: 	}
489: 
490: $q="SELECT aaid,atype,aname FROM fnalertaction";
491: $r=$NATS->DB->Query($q);
492: echo "<table class=\"nicetable\"><tr>";
493: echo "<td><b>".$NATS->Lang->Item("id")."</b></td><td><b>".$NATS->Lang->Item("aa.name")."</b></td><td><b>".$NATS->Lang->Item("aa.type")."</b></td></tr>";
494: while ($row=$NATS->DB->Fetch_Array($r))
495: 	{
496: 	echo "<tr><td>";
497: 	echo "<a href=admin.php?mode=alertactions&aaid=".$row['aaid'].">".$row['aaid']."</a></td>";
498: 	echo "<td><a href=admin.php?mode=alertactions&aaid=".$row['aaid'].">".$row['aname']."</a></td><td>";
499: 	echo aat_atype($row['atype']);
500: 	echo "</td></tr>";
501: 	}
502: echo "</table>";
503: 
504: echo "<br><a href=admin.php?mode=alertactions&action=action_create><b>".$NATS->Lang->Item("aa.create")."</b></a><br>";
505: echo "<br><br>";
506: }
507: else if ($mode=="logs")
508: {
509: // Que ??!?
510: echo "<b class=\"subtitle\">System Logs</b><br><br>";
511: echo "<a href=log.php>System Event Log</a><br><br>";
512: 
513: echo "<br><br>";
514: }
515: else if ($mode=="status")
516: {
517: // system healthcheck
518: 
519: // usage data
520: //$q="SELECT COUNT(fnnode.nodeid),COUNT(fngroup.groupid),COUNT( FROM fnnode,fngroup";
521: $q="SHOW TABLE STATUS LIKE \"fn%\"";
522: $r=$NATS->DB->Query($q);
523: 
524: echo "<b class=\"maintitle\">FreeNATS ".$NATS->Lang->Item("system.status")."</b><br><br>";
525: 
526: $tinfo=array();
527: 
528: echo "<b class=\"subtitle\">".$NATS->Lang->Item("status.size")."</b><br><br>";
529: 
530: echo "<table class=\"nicetable\">";
531: echo "<tr><td><b>".$NATS->Lang->Item("status.tname")."</b></td><td><b>".$NATS->Lang->Item("status.tsize")."</b></td>";
532: echo "<td><b>".$NATS->Lang->Item("status.tsize.kb")."</b></td><td><b>".$NATS->Lang->Item("status.tother")."</b></td></tr>";
533: while ($row=$NATS->DB->Fetch_Array($r))
534: 	{
535: 	echo "<tr><td>".$row['Name']."</td><td>".$row['Rows']."</td>";
536: 	echo "<td>".round($row['Data_length']/1024,0)."</td><td>";
537: 	if (isset($tinfo[$row['Name']])) echo $tinfo[$row['Name']];
538: 	else echo "&nbsp;";
539: 	if ($row['Data_free']>0)
540: 		{
541: 		echo " [".round($row['Data_free']/1024,0)."kb ".$NATS->Lang->Item("status.free")." - ";
542: 		echo "<a href=admin.php?mode=status&action=optimize&table=".$row['Name'].">".$NATS->Lang->Item("status.optimise")."</a>]";
543: 		}
544: 	echo "</td></tr>";
545: 	}
546: echo "</table>";
547: $NATS->DB->Free($r);
548: echo "<br><br>";
549: 
550: echo "<b class=\"subtitle\">".$NATS->Lang->Item("status.running")."</b><br><br>";
551: $q="SELECT * FROM fntestrun WHERE finishx=0";
552: $r=$NATS->DB->Query($q);
553: echo "<b>".$NATS->DB->Num_Rows($r)." ".$NATS->Lang->Item("status.running")."</b><br><br>";
554: if ($NATS->DB->Num_Rows($r)>0)
555: 	{
556: 	echo "<table class=\"nicetable\">";
557: 	echo "<tr><td><b>ID</b></td><td><b>".$NATS->Lang->Item("node")."</b></td><td><b>".$NATS->Lang->Item("started")."</b></td><td><b>".$NATS->Lang->Item("notes")."</b></td></tr>";
558: 	$nowx=time();
559: 	$fifteenx=$nowx-(15*60);
560: 	$hourx=$nowx-(60*60);
561: 	while ($row=$NATS->DB->Fetch_Array($r))
562: 		{
563: 		echo "<tr><td><a href=testrun.php?trid=".$row['trid'].">";
564: 		echo $row['trid']."</a></td>";
565: 		echo "<td><a href=node.php?nodeid=".$row['fnode']."</a></td>";
566: 		echo "<td>".nicedt($row['startx'])." - ".dtago($row['startx'])."</td>";
567: 		echo "<td>";
568: 		if ($row['startx']<$hourx) echo $NATS->Lang->Item("status.run.error");
569: 		else if($row['startx']<$fifteenx) echo $NATS->Lang->Item("status.run.warn");
570: 		else echo "&nbsp;";
571: 		echo "</td></tr>";
572: 		}
573: 	echo "</table>";
574: 	}
575: $NATS->DB->Free($r);
576: echo "<br><br>";
577: 
578: echo "<b class=\"subtitle\">".$NATS->Lang->Item("status.env.http")."</b><br><br>";
579: $env_test_web=1;
580: include("environment.test.php");
581: echo "<br>";
582: echo "<b class=\"subtitle\">".$NATS->Lang->Item("status.env.cli")."</b><br><br>";
583: $output=array();
584: $return=0;
585: exec("php -q environment.test.php",$output,$return);
586: if ($return!=1)
587: 	{
588: 	echo "<b style=\"color: red;\">Error: </b> PHP CLI Script did not seem to execute. PHP-CLI is required for FreeNATS (fatal error)<BR />";
589: 	}
590: foreach($output as $line)
591: 	echo $line;
592: 
593: echo "<br><br>";
594: echo $NATS->Lang->Item("status.disclaim");
595: echo "<br><br>";
596: 	
597: }
598: else if ($mode=="variables")
599: {
600: echo "<b class=\"subtitle\">".$NATS->Lang->Item("variables")."</b> ".hlink("Variable")."<br><br>";
601: $q="SELECT * FROM fnconfig ORDER BY fnc_var ASC";
602: $r=$NATS->DB->Query($q);
603: echo "<table border=0>";
604: while ($row=$NATS->DB->Fetch_Array($r))
605: 	{
606: 	echo "<form action=admin.php method=post>";
607: 	echo "<input type=hidden name=action value=var_save>";
608: 	echo "<input type=hidden name=mode value=variables>";
609: 	echo "<input type=hidden name=orig_var value=\"".$row['fnc_var']."\">";
610: 	echo "<input type=hidden name=orig_val value=\"".$row['fnc_val']."\">";
611: 	echo "<tr><td><input type=text size=20 maxlength=60 name=new_var value=\"".$row['fnc_var']."\"> ";
612: 	echo "</td>";
613: 	echo "<td>=</td>";
614: 	echo "<td><input type=text size=20 maxlength=60 name=new_val value=\"".$row['fnc_val']."\"></td>";
615: 	echo "<td><input type=submit value=\"".$NATS->Lang->Item("save")."\"> ";
616: 	echo hlink("Var:".$row['fnc_var']);
617: 	echo "</td>";
618: 	echo "</tr>";
619: 	echo "</form>";
620: 	}
621: echo "<form action=admin.php method=post>";
622: echo "<input type=hidden name=action value=var_new>";
623: echo "<input type=hidden name=mode value=variables>";
624: echo "<tr><td><input type=text size=20 maxlength=60 name=new_var value=\"\"></td>";
625: echo "<td>=</td>";
626: echo "<td><input type=text size=20 maxlength=60 name=new_val value=\"\"></td>";
627: echo "<td><input type=submit value=\"".$NATS->Lang->Item("create")."\"></td>";
628: echo "</tr>";
629: echo "</form>";
630: echo "</table><br><br>";
631: }
632: else if ($mode=="sysinfo")
633: {
634: echo "<b class=\"subtitle\">FreeNATS ".$NATS->Lang->Item("sys.info")."</b><br><br>";
635: 
636: echo "<b>Version Information</b><br><br>";
637: echo "<table border=0>";
638: echo "<tr><td>".$NATS->Lang->Item("version").":</td><td>".$NATS->Version."</td></tr>";
639: echo "<tr><td>".$NATS->Lang->Item("release").":</td><td>".$NATS->Release."</td></tr>";
640: echo "<tr><td>".$NATS->Lang->Item("compound").":</td><td>".$NATS->Version.$NATS->Release."</td></tr>";
641: echo "</table><br><br>";
642: 
643: echo "<b>".$NATS->Lang->Item("reg.modules")."</b><br><br>";
644: echo "<table class=\"nicetable\" width=600>";
645: echo "<tr><td><b>".$NATS->Lang->Item("name")."</b></td><td><b>".$NATS->Lang->Item("provides")."</b></td>";
646: echo "<td><b>".$NATS->Lang->Item("revision")."</b></td><td><b>".$NATS->Lang->Item("additional")."</b></td></tr>";
647: foreach($NATS->Tests->QuickList as $key => $val)
648: 	{
649: 	echo "<tr><td>";
650: 	echo $NATS->Tests->Tests[$key]->name;
651: 	echo "</td><td>";
652: 	echo $NATS->Tests->Tests[$key]->type;
653: 	echo "</td><td>";
654: 	echo $NATS->Tests->Tests[$key]->revision;
655: 	echo "</td><td>";
656: 	echo $NATS->Tests->Tests[$key]->additional;
657: 	echo "</td></tr>";
658: 	}
659: echo "</table><br><br>";
660: 
661: echo "<b>".$NATS->Lang->Item("reg.events")."</b><br><br>";
662: echo "<table class=\"nicetable\" width=600>";
663: echo "<tr><td><b>".$NATS->Lang->Item("event")."</b></td><td><b>".$NATS->Lang->Item("handlers")."</b></td></tr>";
664: foreach($NATS->EventHandlers as $key => $val)
665: 	{
666: 	echo "<tr><td valign=top>".$key."</td><td>";
667: 	foreach($NATS->EventHandlers[$key] as $handler)
668: 		echo $handler."<br>";
669: 	echo "</td></tr>";
670: 	}
671: echo "</table><br><br>";
672: echo "<b>".$NATS->Lang->Item("reg.languages")."</b><br><br>";
673: $langs=$NATS->Lang->GetLanguages();
674: foreach($langs as $code => $lang)
675: 	{
676: 	echo $code.": ".$lang."<br>";
677: 	}
678: echo "<br><br>";
679: }
680: else // catch-all
681: {
682: echo "<img src=images/options/user.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
683: echo "<a href=admin.php?mode=users>".$NATS->Lang->Item("user.admin")."</a><br><br>";
684: echo "<img src=images/options/application.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
685: echo "<a href=log.php>".$NATS->Lang->Item("event.log")."</a><br><br>";
686: echo "<img src=images/options/letter_open.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
687: echo "<a href=admin.php?mode=alertactions>".$NATS->Lang->Item("alert.actions")."</a><br><br>";
688: echo "<img src=images/options/action_add.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
689: echo "<a href=admin.php?mode=variables>".$NATS->Lang->Item("variables")."</a><br><br>";
690: echo "<img src=images/options/file.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
691: echo "<a href=admin.php?mode=testsessions>".$NATS->Lang->Item("sessions")."</a><br><br>";
692: echo "<img src=images/options/time.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
693: echo "<a href=schedule.php>".$NATS->Lang->Item("schedules")."</a><br><br>";
694: echo "<img src=images/options/folder_open.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
695: echo "<a href=filemanager.php>".$NATS->Lang->Item("file.manager")."</a><br><br>";
696: 
697: if ($NATS->Cfg->Get("site.enable.adminsql",0)==1)
698: 	{
699: 	echo "<img src=images/options/folder_files.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
700: 	echo "<a href=admin.sql.php>".$NATS->Lang->Item("sql.console")."</a><br><br>";
701: 	}
702: echo "<img src=images/options/search.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
703: echo "<a href=admin.dns.php>".$NATS->Lang->Item("dns.console")."</a><br><br>";
704: echo "<img src=images/options/save.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
705: echo "<a href=admin.backup.php>".$NATS->Lang->Item("backup.restore")."</a><br><br>";
706: echo "<img src=images/options/reply.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
707: echo "<a href=admin.php?mode=status>".$NATS->Lang->Item("sys.status")."</a><br><br>";
708: echo "<img src=images/help16.png style=\"vertical-align: bottom;\">&nbsp;&nbsp;";
709: echo "<a href=admin.php?mode=sysinfo>".$NATS->Lang->Item("sys.info")."</a><br><br>";
710: }
711: 
712: if ($mode!="") echo "<a href=admin.php>".$NATS->Lang->Item("back.to.admin")."</a><br><br>";
713: ?>
714: 
715: 
716: <?php
717: Screen_Footer();
718: ?>
719: