summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2000-10-10 10:57:16 +0000
committerDries Buytaert <dries@buytaert.net>2000-10-10 10:57:16 +0000
commitbfd8c86464dec6348c665b0a1f1eafe14bfd2a0d (patch)
tree579c89704621aabbc7a911350dc329123e7728b0 /includes
parent4a6c6de758960a2f98ba58f20a1c17c6ee67111c (diff)
downloadbrdo-bfd8c86464dec6348c665b0a1f1eafe14bfd2a0d.tar.gz
brdo-bfd8c86464dec6348c665b0a1f1eafe14bfd2a0d.tar.bz2
...
Diffstat (limited to 'includes')
-rw-r--r--includes/backend.class.php241
-rw-r--r--includes/calendar.class.php76
-rw-r--r--includes/user.class.php83
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\">&lt;</A> &nbsp; ". date("F Y", $this->date) ." &nbsp; <A HREF=\"$PHP_SELF?date=$next\">&gt;</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\">&nbsp</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\">&nbsp;</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);
+}
+
+?>