id = $channel->id; $this->site = $channel->site; $this->file = $channel->file; $this->url = $channel->url; $this->contact = $channel->contact; $this->timestamp = $channel->timestamp; // Check to see whether we have to update our headlines first: if (time() - $this->timestamp > $timout) $this->url2sql(); // Read headlines: $result = db_query("SELECT * FROM headlines WHERE id = '$this->id' ORDER BY number"); while ($headline = db_fetch_object($result)) { array_push($this->headlines, "link\">$headline->title"); } } else { $this->site = $site; $this->url = $url; $this->file = $file; $this->contact = $contact; } } function url2sql($timout = 10) { global $site_name; if ($this->file) { // Decode URL: $url = parse_url($this->file); // Retrieve data from website: $fp = fsockopen($url[host], ($url[port] ? $url[port] : 80), &$errno, &$errstr, $timout); if ($fp) { // Request data via URL: fputs($fp, "GET $url[path]?$url[query] HTTP/1.0\nUser-Agent: $site_name\nHost: $url[host]\nAccept: */*\n\n"); // Read data from socket: while(!feof($fp)) $data .= fgets($fp, 128); if (strstr($data, "200 OK")) { // Remove existing entries: $result = db_query("DELETE FROM headlines WHERE id = '$this->id'"); // Strip all 'junk': $data = ereg_replace("", "", $data); $data = ereg_replace("", $data); $number = 0; for (reset($items); $item = current($items); next($items)) { // Extract data: $link = ereg_replace(".*", "", $item); $link = ereg_replace(".*", "", $link); $title = ereg_replace(".*", "", $item); $title = ereg_replace(".*", "", $title); // Increase the number of headlines: $number += 1; // Insert item in database: $result = db_query("INSERT INTO headlines (id, title, link, number) VALUES('". check_input($this->id) ."', '". check_input($title) ."', '". check_input($link) ."', '". check_input($number) ."')"); } // Mark channels as being updated: $result = db_query("UPDATE channel SET timestamp = '". time() ."' WHERE id = '$this->id'"); $this->timestamp = time(); } else { watchdog("error", "failed to retrieve headline data from '$this->site':
$data
"); } } } } function displayHeadlines($timout = 1800) { global $theme; // Get channel info: $result = db_query("SELECT * FROM channel WHERE site = '$this->site'"); if ($this->id) { // Check to see whether we have to update our headlines first: if (time() - $this->timestamp > $timout) $this->url2sql(); // Grab headlines from database: $result = db_query("SELECT * FROM headlines WHERE id = '$this->id' ORDER BY number"); while ($headline = db_fetch_object($result)) { $content .= "
  • link\">$headline->title
  • "; } // Add timestamp: $update = round((time() - $this->timestamp) / 60); // Display box: $theme->box($this->site, $content); } else print "

    Warning: something whiched happened: specified channel could not be found in database.

    "; } function add() { // Add channel: $result = db_query("INSERT INTO channel (site, file, url, contact, timestamp) VALUES ('". check_input($this->site) ."', '". check_input($this->file) ."', '". check_input($this->url) ."', '". check_input($this->contact) ."', 1)"); } function delete() { // Delete channel: $result = db_query("DELETE FROM channel WHERE id = '$this->id'"); // Delete headlines: $result = db_query("DELETE FROM headlines WHERE id = '$this->id'"); } function refresh() { // Delete headlines: $result = db_query("DELETE FROM headlines WHERE id = '$this->id'"); // Mark channel as invalid to enforce an update: $result = db_query("UPDATE channel SET timestamp = 1 WHERE id = '$this->id'"); } } ?>