diff options
author | Dries Buytaert <dries@buytaert.net> | 2000-10-10 10:57:16 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2000-10-10 10:57:16 +0000 |
commit | bfd8c86464dec6348c665b0a1f1eafe14bfd2a0d (patch) | |
tree | 579c89704621aabbc7a911350dc329123e7728b0 /includes | |
parent | 4a6c6de758960a2f98ba58f20a1c17c6ee67111c (diff) | |
download | brdo-bfd8c86464dec6348c665b0a1f1eafe14bfd2a0d.tar.gz brdo-bfd8c86464dec6348c665b0a1f1eafe14bfd2a0d.tar.bz2 |
...
Diffstat (limited to 'includes')
-rw-r--r-- | includes/backend.class.php | 241 | ||||
-rw-r--r-- | includes/calendar.class.php | 76 | ||||
-rw-r--r-- | includes/user.class.php | 83 |
3 files changed, 400 insertions, 0 deletions
diff --git a/includes/backend.class.php b/includes/backend.class.php new file mode 100644 index 000000000..865ec2e77 --- /dev/null +++ b/includes/backend.class.php @@ -0,0 +1,241 @@ +<? + +include "function.inc"; + +class backend { + + // Channel properties: + var $id; + var $url; + var $site; + var $file; + var $contact; + var $timestamp; + + // Contains the raw rdf/rss/xml file: + var $data; + + // Contains the parsed rdf/rss/xml file: + var $headlines = array(); // latest headlines + + + ##### + # Syntax.......: backend(...); + # Description..: Constructor - initializes the internal variables. + # + function backend($id, $site, $url, $file, $contact, $timout = 1800) { + ### Get channel info: + $result = db_query("SELECT * FROM channel WHERE id = '$id' OR site = '$site'"); + + if ($channel = db_fetch_object($result)) { + ### Initialize internal variables: + $this->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, "<A HREF=\"$headline->link\">$headline->title</A>"); + } + + } + else { + $this->site = $site; + $this->url = $url; + $this->file = $file; + $this->contact = $contact; + } + } + + ##### + # Syntax.......: rdf2sql(optional timout value in seconds); + # Description..: Reads a RDF file from a server, parses it and inserts + # the fresh data in a MySQL table. + # + function rdf2sql($timout = 10) { + if ($this->file) { + ### Decode URL: + $url = parse_url($this->file); + $host = $url[host]; + $port = $url[port] ? $url[port] : 80; + $path = $url[path]; + + // print "<PRE><B>Debug:</B> $url - $host - $port - $path</PRE>"; + + ### Retrieve data from website: + $fp = fsockopen($host, $port, &$errno, &$errstr, $timout); + + if ($fp) { + ### Get data from URL: + fputs($fp, "GET $path HTTP/1.0\n"); + fputs($fp, "User-Agent: headline grabber\n"); + fputs($fp, "Host: ". $host ."\n"); + fputs($fp, "Accept: */*\n\n"); + + while(!feof($fp)) $data .= fgets($fp, 128); + + // print "<PRE>$data</PRE><HR>"; + + if (strstr($data, "200 OK")) { + + ### Remove existing entries: + $result = db_query("DELETE FROM headlines WHERE id = $this->id"); + + ### Strip all 'junk': + $data = ereg_replace("<?xml.*/image>", "", $data); + $data = ereg_replace("</rdf.*", "", $data); + $data = chop($data); + + ### Iterating through our data processing each entry/item: + $items = explode("</item>", $data); + $number = 0; + + for (reset($items); $item = current($items); next($items)) { + ### Extract data: + $link = ereg_replace(".*<link>", "", $item); + $link = ereg_replace("</link>.*", "", $link); + $title = ereg_replace(".*<title>", "", $item); + $title = ereg_replace("</title>.*", "", $title); + + ### Clean headlines: + $title = stripslashes(fixquotes($title)); + + ### Count the number of stories: + $number += 1; + + ### Insert item in database: + $result = db_query("INSERT INTO headlines (id, title, link, number) VALUES('$this->id', '$title', '$link', '$number')"); + } + + ### Mark channels as being updated: + $result = db_query("UPDATE channel SET timestamp = '". time() ."' WHERE id = $this->id"); + $this->timestamp = time(); + } + else print "<HR>RDF parser: 404 error?<BR><BR><PRE>$data</PRE><HR>"; + } + } + } + + + ##### + # Syntax.......: rss2sql(optional timout value in seconds); + # Description..: Reads a RSS file from a server, parses it and inserts + # the fresh data in a MySQL table. + # + function rss2sql($timout = 10) { + print "backend->rss2sql : TODO<BR>"; + } + + + ##### + # Syntax.......: xml2sql(optional timout value in seconds); + # Description..: Reads a XML file from a server, parses it and inserts + # the fresh data in a MySQL table. + # + function xml2sql($timout = 10) { + print "backend->xml2sql : TODO<BR>"; + } + + + ##### + # Syntax.......: url2sql(optional timout value in seconds); + # Description..: Generic function to fetch fresh headlines. It checks whether + # we are dealing with a remote RDF, RSS or XML file and calls + # the appropriate function to fetch the headline. The function + # is an abstraction towards the programmer as he doesn't need + # to know with what file extension we are dealing. + # + function url2sql($timout = 10) { + if (strstr($this->file, ".rdf")) $this->rdf2sql($timout); + if (strstr($this->file, ".rss")) $this->rss2sql($timout); + if (strstr($this->file, ".xml")) $this->xml2sql($timout); + } + + + ##### + # Syntax.......: + # Description..: + # + 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 .= "<LI><A HREF=\"$headline->link\">$headline->title</A></LI>"; + } + ### Add timestamp: + $update = round((time() - $this->timestamp) / 60); + $content .= "<P ALIGN=\"right\">[ <A HREF=\"backend.php?op=reset&site=$this->site\"><FONT COLOR=\"$theme->hlcolor2\">reset</FONT></A> | updated $update min. ago ]</P>"; + + ### Display box: + $theme->box("$this->site", $content); + } + else print "<P>Warning: something whiched happened: specified channel could not be found in database.</P>"; + } + + + ##### + # Syntax.......: add() + # Description..: Adds this backend to the database. + # + function add() { + ### Add channel: + $result = db_query("INSERT INTO channel (site, file, url, contact, timestamp) VALUES ('$this->site', '$this->file', '$this->url', '$this->contact', 42)"); + } + + + ##### + # Syntax.......: delete() + # Description..: Deletes this backend + # + 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"); + } + + ##### + # Syntax.......: refresh() + # Description..: Deletes all headlines associated with this backend. + # + 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 = 42 WHERE id = $this->id"); + } + + ##### + # Syntax.......: dump() + # Description..: Dumps the content of this class to screen. + # + function dump() { + print "<B>Dump backend:</B><BR>"; + print "Id: $this->id<BR>"; + print "Site: $this->site<BR>"; + print "URL: $this->url<BR>"; + print "File: $this->file<BR>"; + print "Contact: $this->contact<BR>"; + } +} + +?> diff --git a/includes/calendar.class.php b/includes/calendar.class.php new file mode 100644 index 000000000..561363c33 --- /dev/null +++ b/includes/calendar.class.php @@ -0,0 +1,76 @@ +<? + +class calendar { + var $date; + + function calendar($date) { + $this->date = $date; + } + + function display() { + global $PHP_SELF; + + ### Extract information from the given date: + $month = date("n", $this->date); + $year = date("Y", $this->date); + $day = date("d", $this->date); + + ### Extract first day of the month: + $first = date("w", mktime(0, 0, 0, $month, 1, $year)); + + ### Extract last day of the month: + $last = date("t", mktime(0, 0, 0, $month, 1, $year)); + + ### Calculate previous and next months dates: + $prev = mktime(0, 0, 0, $month - 1, $day, $year); + $next = mktime(0, 0, 0, $month + 1, $day, $year); + + ### Generate calendar header: + $output .= "\n<!-- calendar -->\n"; + $output .= "<TABLE WIDTH=\"100%\" BORDER=\"1\" CELLSPACING=\"0\" CELLPADDING=\"1\">\n"; + $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"7\"><SMALL><A HREF=\"$PHP_SELF?date=$prev\"><</A> ". date("F Y", $this->date) ." <A HREF=\"$PHP_SELF?date=$next\">></A></SMALL></TD></TR>\n"; + $output .= " <TR><TD ALIGN=\"center\"><SMALL>S</SMALL></TD><TD ALIGN=\"center\"><SMALL>M</SMALL></TD><TD ALIGN=\"center\"><SMALL>T</SMALL></TD><TD ALIGN=\"center\"><SMALL>W</SMALL></TD><TD ALIGN=\"center\"><SMALL>T</SMALL></TD><TD ALIGN=\"center\"><SMALL>F</SMALL></TD><TD ALIGN=\"center\"><SMALL>S</SMALL></TD></TR>\n"; + + ### Initialize temporary variables: + $nday = 1; + $sday = $first; + + ### Loop through all the days of the month: + while ($nday <= $last) { + ### Set up blank days for first week of the month: + if ($first) { + $output .= " <TR><TD COLSPAN=\"$first\"> </TD>\n"; + $first = 0; + } + + ### Start every week on a new line: + if ($sday == 0) $output .= " <TR>\n"; + + ### Print one cell: + $date = mktime(24, 0, 0, $month, $nday, $year); + if ($nday == $day) $output .= " <TD ALIGN=\"center\"><SMALL><B>$nday</B></SMALL></TD>\n"; + else if ($date > time()) $output .= " <TD ALIGN=\"center\"><SMALL>$nday</SMALL></TD>\n"; + else $output .= " <TD ALIGN=\"center\"><SMALL><A HREF=\"$PHP_SELF?date=$date\" STYLE=\"text-decoration: none;\">$nday</A></SMALL></TD>\n"; + + ### Start every week on a new line: + if ($sday == 6) $output .= " </TR>\n"; + + ### Update temporary variables: + $sday++; + $sday = $sday % 7; + $nday++; + } + + ### Complete the calendar: + if ($sday) { + $end = 7 - $sday; + $output .= " <TD COLSPAN=\"$end\"> </TD>\n </TR>\n"; + } + $output .= "</TABLE>\n\n"; + + ### Return calendar: + return $output; + } +} + +?> diff --git a/includes/user.class.php b/includes/user.class.php new file mode 100644 index 000000000..115c940c0 --- /dev/null +++ b/includes/user.class.php @@ -0,0 +1,83 @@ +<? + +$access = array("Administrator" => 0x00000001, + "User manager" => 0x00000002, + "News manager" => 0x00000004); + +class User { + function User($userid, $passwd="") { + $result = db_query("SELECT * FROM users WHERE LOWER(userid) = LOWER('$userid') && passwd = PASSWORD('$passwd') && STATUS = 0"); + if (db_num_rows($result) == 1) { + foreach (db_fetch_row($result) as $key=>$value) { $field = mysql_field_name($result, $key); $this->$field = stripslashes($value); $this->field[] = $field; } + } + } +} + +function user_save() { + global $user; + ### Compose query to update user record: +} + +function user_rehash() { + global $user; + $result = db_query("SELECT * FROM users WHERE id=$user->id"); + if (db_num_rows($result) == 1) { + foreach (db_fetch_array($result) as $key=>$value) { $user->$key = stripslashes($value); } + } +} + +function user_valid($access = 0) { + global $user; + if ($user->userid) { + user_rehash(); // synchronisation purpose + $user->last_access = time(); + $user->last_host = ($GLOBALS[REMOTE_HOST]) ? $GLOBALS[REMOTE_HOST] : $GLOBALS[REMOTE_ADDR]; + db_query("UPDATE users SET last_access = '$user->last_access', last_host = '$user->last_host' WHERE id = $user->id"); + if ($user->access & $access || $access == 0) return 1; + } + return 0; +} + +function user_getHistory($history, $field) { + $data = explode(";", $history); + for (reset($data); current($data); next($data)) { + $entry = explode(":", current($data)); + if (reset($entry) == $field) $rval = end($entry); + } + return $rval; +} + +function user_setHistory(&$user, $field, $value) { + + $history = $user->history; + if (!$value) { + ### remove entry: + $data = explode(";", $history); + for (reset($data); current($data); next($data)) { + $entry = explode(":", current($data)); + if ($entry[0] != $field) $rval .= "$entry[0]:$entry[1];"; + } + } + else if (strstr($history, "$field:")) { + ### found: update exsisting entry: + $data = explode(";", $history); + for (reset($data); current($data); next($data)) { + $entry = explode(":", current($data)); + if ($entry[0] == $field) $entry[1] = $value; + $rval .= "$entry[0]:$entry[1];"; + } + } + else { + ### not found: add new entry: + $rval = "$history$field:$value;"; + } + $user->history = $rval; + + ### save new history: + $query .= "UPDATE users SET "; + foreach ($user->field as $key=>$field) { $value = $user->$field; $query .= "$field = '". addslashes($value) ."', "; } + $query .= " id = $user->id WHERE id = $user->id"; + db_query($query); +} + +?> |