File: 1.14.1a/server/base/rss.inc.php (View as Code)

1: 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: class NATS_RSS 24: { 25: var $NATS=false; 26: 27: function NATS_RSS() 28: { 29: global $NATS; 30: $this->NATS = &$NATS; 31: } 32: 33: function Create($name) 34: { 35: mt_srand(microtime()*1000000); 36: $allow="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 37: $alen=strlen($allow); 38: $key=""; 39: $len=32; 40: for ($a=0; $a<$len; $a++) 41: { 42: $key.=$allow[mt_rand(0,$alen-1)]; 43: } 44: $q="INSERT INTO fnrssfeed(feedkey,feedname, feedtype, feedrange, rangeopt) " 45: ."VALUES(\"".$key."\",\"".ss($name)."\",\"all\"" 46: .",\"xdays\",30)"; 47: $this->NATS->DB->Query($q); 48: 49: return $this->NATS->DB->Insert_Id(); 50: } 51: 52: function Delete($id) 53: { 54: $q="DELETE FROM fnrssfeed WHERE feedid=".ss($id); 55: $this->NATS->DB->Query($q); 56: } 57: 58: function GetTypes() 59: { 60: return array( 61: "all" => $this->NATS->Lang->Item("all.enabled.nodes"), 62: "node" => $this->NATS->Lang->Item("one.node"), 63: "group" => $this->NATS->Lang->Item("group") ); 64: } 65: 66: function GetRanges() 67: { 68: return array( 69: "xdays" => $this->NATS->Lang->Item("last.x.days"), 70: "xalerts" => $this->NATS->Lang->Item("last.x.alerts"), 71: "alerts" => $this->NATS->Lang->Item("current.alerts"), 72: "alertnode" => $this->NATS->Lang->Item("last.alerts.node") ); 73: } 74: 75: function GetFeeds($id=0) 76: { 77: $q="SELECT * FROM fnrssfeed"; 78: if ($id!=0) $q.=" WHERE feedid=".ss($id)." LIMIT 0,1"; 79: 80: $out=array(); 81: 82: $r=$this->NATS->DB->Query($q); 83: 84: $types=$this->GetTypes(); 85: $ranges=$this->GetRanges(); 86: 87: while ($row=$this->NATS->DB->Fetch_Array($r)) 88: { 89: $out[]=$row; 90: } 91: 92: $this->NATS->DB->Free($r); 93: 94: return $out; 95: } 96: 97: function GetFeed($id) 98: { 99: $feeds = $this->GetFeeds($id); 100: if (count($feeds)>0) return $feeds[0]; 101: else return $feeds; 102: } 103: 104: function SaveFeed($id, $data) 105: { 106: $q="UPDATE fnrssfeed SET "; 107: $first=true; 108: 109: foreach($data as $field => $value) 110: { 111: if ($first) $first=false; 112: else $q.=","; 113: $q.=ss($field)."=\"".ss($value)."\""; 114: } 115: $q.=" WHERE feedid=".ss($id); 116: 117: $this->NATS->DB->Query($q); 118: 119: if ($this->NATS->DB->Affected_Rows()<=0) return false; 120: else return true; 121: } 122: 123: function GetIdFromCompound($compound) 124: { 125: $parts=explode("-",$compound); 126: $key=$parts[0]; 127: $id=$parts[1]; 128: 129: $q="SELECT feedid FROM fnrssfeed WHERE feedid=".ss($id)." AND feedkey=\"".ss($key)."\" LIMIT 0,1"; 130: $r=$this->NATS->DB->Query($q); 131: 132: if ($row=$this->NATS->DB->Fetch_Array($r)) 133: { 134: $this->NATS->DB->Free($r); 135: return $row['feedid']; 136: } 137: else return false; 138: } 139: 140: function GetCompound($id, $key="") 141: { 142: if ($key=="") 143: { 144: $feed=$this->GetFeed($id); 145: $key=$feed['feedkey']; 146: } 147: return $key."-".$id; 148: } 149: 150: function GetURL($id, $key="") 151: { 152: $compound=$this->GetCompound($id, $key); 153: return GetAbsolute("rss.php?feed=".$compound); 154: } 155: 156: function Item($title, $link, $published, $desc) 157: { 158: $out="\n" 159: ."<![CDATA[".$title."]]>\n" 160: ."\n" 161: ."\n" 162: ."\n" 163: ."\n" 164: ."\n"; 165: return $out; 166: } 167: 168: function Render($id) 169: { 170: $feed=$this->GetFeed($id); 171: if (count($feed)<=0) return false; 172: $out="\n"; 173: $out.="\n"; 174: $out.="\n"; 175: $out.="<![CDATA["; </SPAN><SPAN CLASS="file_line" ID="line_176" onClick="line_click(176)"><FONT CLASS="line_count" ID="line_count_176">176:</FONT> if ($feed['feedname']!="") $out.=$feed['feedname']; </SPAN><SPAN CLASS="file_line" ID="line_177" onClick="line_click(177)"><FONT CLASS="line_count" ID="line_count_177">177:</FONT> else $out.="FreeNATS RSS Feed"; </SPAN><SPAN CLASS="file_line" ID="line_178" onClick="line_click(178)"><FONT CLASS="line_count" ID="line_count_178">178:</FONT> $out.="]]>\n"; 179: $me=GetAbsolute("rss.php?feed=".$_REQUEST['feed']); 180: $out.="".$me."\n"; 181: $out.="\n"; 182: $out.="FreeNATS RSS Feed\n"; 183: $out.="".date("D, d M Y H:i:s")." GMT\n"; 184: $out.="en-us\n"; 185: 186: switch($feed['feedtype']) 187: { 188: case "all": 189: $nodes=$this->NATS->GetNodes(); 190: break; 191: case "node": 192: $nodes=array(); 193: $nodes[]['nodeid']=$feed['typeopt']; 194: break; 195: case "group": 196: $nodes=array(); 197: $q="SELECT nodeid FROM fngrouplink WHERE groupid=".ss($feed['typeopt']); 198: $r=$this->NATS->DB->Query($q); 199: while ($row=$this->NATS->DB->Fetch_Array($r)) 200: { 201: $nodes[]=$NATS->GetNode($row['nodeid']); 202: } 203: $this->NATS->DB->Free($r); 204: break; 205: default: $nodes=array(); 206: } 207: 208: $inlist=""; 209: $first=true; 210: foreach($nodes as $node) 211: { 212: if ($first) $first=false; 213: else $inlist.=","; 214: $inlist.="\"".ss($node['nodeid'])."\""; 215: } 216: 217: $alerts=array(); 218: switch($feed['feedrange']) 219: { 220: case "xdays": 221: if (!is_numeric($feed['rangeopt'])) $days=30; 222: else $days=$feed['rangeopt']; 223: $secs = $days * 24 * 60 * 60; 224: $from = time() - $secs; 225: $q="SELECT * FROM fnalert WHERE (closedx=0 OR closedx>".$from.") AND nodeid IN (".$inlist.") ORDER BY LENGTH(closedx) ASC, closedx DESC"; 226: break; 227: 228: case "xalerts": 229: if (!is_numeric($feed['rangeopt'])) $acount=30; 230: else $acount=$feed['rangeopt']; 231: $q="SELECT * FROM fnalert WHERE nodeid IN(".$inlist.") ORDER BY LENGTH(closedx) ASC, closedx DESC LIMIT 0,".$acount; 232: break; 233: 234: case "alerts": 235: $q="SELECT * FROM fnalert WHERE closedx=0 AND nodeid IN(".$inlist.")"; 236: break; 237: 238: case "alertnode": 239: $q=array(); 240: foreach($nodes as $node) 241: { 242: $q[]="SELECT * FROM fnalert WHERE nodeid=\"".ss($node['nodeid'])."\" ORDER BY LENGTH(closedx) ASC, closedx DESC LIMIT 0,1"; 243: } 244: break; 245: 246: } 247: if (!is_array($q)) $q=array($q); 248: foreach($q as $query) 249: { 250: $r=$this->NATS->DB->Query($query); 251: while ($row=$this->NATS->DB->Fetch_Array($r)) 252: { 253: $alerts[]=$row; 254: } 255: $this->NATS->DB->Free($r); 256: } 257: 258: foreach($alerts as $alert) 259: { 260: $title=$alert['nodeid']." ".$this->NATS->Lang->Item("alert"); 261: if ($alert['closedx']!=0) $title.=" (".$this->NATS->Lang->Item("closed").")"; 262: else $title.=" (".$this->NATS->Lang->Item("open").")"; 263: $link=GetAbsolute("node.php?nodeid=".$alert['nodeid']); 264: if ($alert['closedx']==0) $pubtime=$alert['openedx']; 265: else $pubtime=$alert['closedx']; 266: $pub=date("D, d M Y H:i:s",$pubtime)." GMT"; 267: 268: $q="SELECT logentry FROM fnalertlog WHERE alertid=".$alert['alertid']." ORDER BY alid ASC LIMIT 0,1"; 269: $r=$this->NATS->DB->Query($q); 270: if ($row=$this->NATS->DB->Fetch_Array($r)) $desc=$row['logentry']; 271: else $desc=""; 272: $this->NATS->DB->Free($r); 273: 274: $out.=$this->Item($title, $link, $pub, $desc); 275: } 276: 277: $out.="\n\n"; 278: 279: return $out; 280: } 281: 282: 283: } 284: ?>