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