summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2000-12-14 14:20:06 +0000
committerDries Buytaert <dries@buytaert.net>2000-12-14 14:20:06 +0000
commit8a77861958367a0364675f93c8d49b953e4d8566 (patch)
tree95575e662c8c6b852b1c4097537e9283887564c5
parent7a45d84a9f9458387bf4f57ac5a520f31c1604ab (diff)
downloadbrdo-8a77861958367a0364675f93c8d49b953e4d8566.tar.gz
brdo-8a77861958367a0364675f93c8d49b953e4d8566.tar.bz2
- large batch of updates
-rw-r--r--admin.php785
-rw-r--r--backend.php124
-rw-r--r--diary.php2
-rw-r--r--error.php2
-rw-r--r--includes/admin.inc47
-rw-r--r--includes/blob.inc22
-rw-r--r--includes/database.inc9
-rw-r--r--includes/droplet.inc22
-rw-r--r--includes/function.inc6
-rw-r--r--includes/theme.inc14
-rw-r--r--module.php6
-rw-r--r--modules/backend.class (renamed from includes/backend.inc)107
-rw-r--r--themes/marvin/marvin.theme2
13 files changed, 94 insertions, 1054 deletions
diff --git a/admin.php b/admin.php
index d6acdd3f0..df0478d23 100644
--- a/admin.php
+++ b/admin.php
@@ -1,778 +1,37 @@
<?
-// TEMPORARY SOLUTION:
+// temporary permission solution:
if (!$user->id || $user->id > 4) exit();
-/*
- * Account administration:
- */
-function account_display($order = "username") {
- $sort = array("ID" => "id", "fake e-mail address" => "fake_email", "homepage" => "url", "hostname" => "last_host", "last access date" => "last_access", "real e-mail address" => "real_email", "real name" => "name", "status" => "status", "theme" => "theme", "timezone" => "timezone", "username" => "userid");
- $show = array("ID" => "id", "username" => "userid", "$order" => "$sort[$order]", "status" => "status");
- $stat = array(0 => "blocked", 1 => "not confirmed", 2 => "open");
+include "includes/admin.inc";
- ### Perform query:
- $result = db_query("SELECT u.id, u.userid, u.$sort[$order], u.status FROM users u ORDER BY $sort[$order]");
-
- ### Generate output:
- $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\">\n";
- $output .= " <TR>\n";
- $output .= " <TH ALIGN=\"right\" COLSPAN=\"". (sizeof($show) + 1) ."\">\n";
- $output .= " <FORM ACTION=\"admin.php?section=accounts\" METHOD=\"post\">\n";
- $output .= " <SELECT NAME=\"order\">\n";
- foreach ($sort as $key=>$value) {
- $output .= " <OPTION VALUE=\"$key\"". ($key == $order ? " SELECTED" : "") .">Sort by $key</OPTION>\n";
- }
- $output .= " </SELECT>\n";
- $output .= " <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Update\">\n";
- $output .= " </FORM>\n";
- $output .= " </TH>\n";
- $output .= " </TR>\n";
- $output .= " <TR>\n";
- foreach ($show as $key=>$value) {
- $output .= " <TH>$key</TH>\n";
- }
- $output .= " <TH>operations</TH>\n";
- $output .= " </TR>\n";
+// display admin header:
+admin_header();
- while ($account = db_fetch_array($result)) {
- $output .= " <TR>\n";
- foreach ($show as $key=>$value) {
- switch($value) {
- case "real_email":
- $output .= " <TD>". format_email($account[$value]) ."</TD>\n";
- break;
- case "last_access":
- $output .= " <TD>". format_date($account[$value]) ."</TD>\n";
- break;
- case "status":
- $output .= " <TD ALIGN=\"center\">". $stat[$account[$value]] ."</TD>\n";
- break;
- case "timezone":
- $output .= " <TD ALIGN=\"center\">". format_data($account[$value] / 3600) ."</TD>\n";
- break;
- case "url":
- $output .= " <TD>". format_url($account[$value]) ."</TD>\n";
- break;
- case "userid":
- $output .= " <TD>". format_username($account[$value], 1) ."</TD>\n";
- break;
- default:
- $output .= " <TD>". format_data($account[$value]) ."</TD>\n";
- }
+// generate administrator menu:
+$handle = opendir("modules");
+while ($file = readdir($handle)) {
+ if ($filename = substr($file, 0, strpos($file, ".module"))) {
+ if ($filename == $mod) {
+ $output .= "$filename | ";
+ }
+ else {
+ include_once "modules/$filename.module";
+ if ($module["admin"]) $output .= "<A HREF=\"admin.php?mod=$filename\">$filename</A> | ";
}
- $output .= " <TD ALIGN=\"center\"><A HREF=\"admin.php?section=accounts&op=view&name=$account[userid]\">view</A></TD>\n";
- $output .= " </TR>\n";
- }
- $output .= "</TABLE>\n";
-
- print $output;
-}
-
-function account_stories($id) {
- $result = db_query("SELECT * FROM stories WHERE author = $id ORDER BY timestamp DESC");
- while ($story = db_fetch_object($result)) {
- $output .= "<LI><A HREF=\"discussion.php?id=$story->id\">". check_output($story->subject) ."</A></LI>\n";
- }
- return $output;
-}
-
-function account_comments($id) {
- $result = db_query("SELECT * FROM comments WHERE author = $id ORDER BY timestamp DESC");
- while ($comment = db_fetch_object($result)) {
- $output .= "<LI><A HREF=\"discussion.php?id=$comment->sid&cid=$comment->cid&pid=$comment->pid#$comment->cid\">". check_output($comment->subject) ."</A></LI>\n";
- }
- return $output;
-}
-
-function account_view($name) {
- $status = array(0 => "blocked", 1 => "not confirmed", 2 => "open");
-
- $result = db_query("SELECT * FROM users WHERE userid = '$name'");
-
- if ($account = db_fetch_object($result)) {
- $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\">\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>ID:</B></TD><TD>$account->id</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Status:</B></TD><TD>". $status[$account->status] ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Username:</B></TD><TD>$account->userid</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Real name:</B></TD><TD>". format_data($account->name) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Real e-mail address:</B></TD><TD>". format_email($account->real_email) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Fake e-mail address:</B></TD><TD>". format_data($account->fake_email) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>URL of homepage:</B></TD><TD>". format_url($account->url) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Last access:</B></TD><TD>". format_date($account->last_access) ." from $account->last_host</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Bio information:</B></TD><TD>". format_data($account->bio) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Signature:</B></TD><TD>". format_data($account->signature) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Theme:</B></TD><TD>". format_data($account->theme) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Timezone:</B></TD><TD>". format_data($account->timezone / 3600) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\" VALIGN=\"top\"><B>Submitted stories:</B></TD><TD>". format_data(account_stories($account->id)) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\" VALIGN=\"top\"><B>Submitted comments:</B></TD><TD>". format_data(account_comments($account->id)) ."</TD></TR>\n";
- $output .= "</TABLE>\n";
- print "$output";
- }
-}
-
-/*
- * Watchdog administration:
- */
-function watchdog_display($order = "date") {
- $colors = array("#D8BFD8", "#6495ED", "#6A5ADF", "#FFFFFF", "#FFA500", "#FF3C3C");
- $fields = array("date" => "id DESC", "username" => "user", "location" => "location", "message" => "message DESC", "level" => "level DESC");
-
- ### Perform query:
- $result = db_query("SELECT l.*, u.userid FROM watchdog l LEFT JOIN users u ON l.user = u.id ORDER BY l.$fields[$order]");
-
- ### Generate output:
- $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\">\n";
- $output .= " <TR>\n";
- $output .= " <TH ALIGN=\"right\" COLSPAN=\"4\">\n";
- $output .= " <FORM ACTION=\"admin.php?section=watchdog\" METHOD=\"post\">\n";
- $output .= " <SELECT NAME=\"order\">\n";
- foreach ($fields as $key=>$value) {
- $output .= " <OPTION VALUE=\"$key\"". ($key == $order ? " SELECTED" : "") .">Sort by $key</OPTION>\n";
- }
- $output .= " </SELECT>\n";
- $output .= " <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Update\">\n";
- $output .= " </FORM>\n";
- $output .= " </TH>\n";
- $output .= " </TR>\n";
- $output .= " <TR>\n";
- $output .= " <TH>date</TH>\n";
- $output .= " <TH>message</TH>\n";
- $output .= " <TH>user</TH>\n";
- $output .= " <TH>operations</TH>\n";
- $output .= " </TR>\n";
-
- while ($watchdog = db_fetch_object($result)) {
- $output .= " <TR BGCOLOR=\"". $colors[$watchdog->level] ."\"><TD>". format_date($watchdog->timestamp) ."</TD><TD>". substr(check_output($watchdog->message), 0, 44) ."</TD><TD ALIGN=\"center\">". format_username($watchdog->userid, 1) ."</A></TD><TD ALIGN=\"center\"><A HREF=\"admin.php?section=watchdog&op=view&id=$watchdog->id\">more</A></TD></TR>\n";
- }
-
- $output .= "</TABLE>\n";
-
- print $output;
-}
-
-function watchdog_view($id) {
- $result = db_query("SELECT l.*, u.userid FROM watchdog l LEFT JOIN users u ON l.user = u.id WHERE l.id = $id");
-
- if ($watchdog = db_fetch_object($result)) {
- $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\">\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Level:</B></TD><TD>$watchdog->level</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Date:</B></TD><TD>". format_date($watchdog->timestamp, "extra large") ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>User:</B></TD><TD>". format_username($watchdog->userid, 1) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Location:</B></TD><TD>$watchdog->location</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Message:</B></TD><TD>$watchdog->message</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\"><B>Hostname:</B></TD><TD>$watchdog->hostname</TD></TR>\n";
- $output .= "</TABLE>\n";
- print $output;
- }
-}
-
-/*
- * Cron administration:
- */
-function cron_display() {
- ### Perform query:
- $result = db_query("SELECT * FROM cron");
-
- ### Generate output:
- while ($cron = db_fetch_object($result)) {
- $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\">\n";
- $output .= " <TR><TD ALIGN=\"right\" VALIGN=\"top\">Name:</TD><TD>". check_output($cron->name) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\" VALIGN=\"top\">Help:</TD><TD>". check_output($cron->help) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\" VALIGN=\"top\">Code:</TD><TD><CODE>". nl2br($cron->code) ."</CODE></TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\" VALIGN=\"top\">Last run:</TD><TD>". format_date($cron->timestamp) ."</TD></TR>\n";
- $output .= " <TD><TD ALIGN=\"right\" VALIGN=\"top\">Scheduled:</TD><TD>every $cron->scheduled seconds</TD></TR>\n";
- $output .= "</TABLE>\n";
- $output .= "<BR><BR>\n";
- }
-
- print $output;
-}
-
-/*
- * Ban administration:
- */
-
-function ban_check($mask, $category) {
- $ban = ban_match($mask, $category);
- $output .= "". ($ban ? "Matched ban '<B>$ban->mask</B>' with reason: <I>$ban->reason</I>.<P>\n" : "No matching bans for '$mask'.<P>\n") ."";
- print $output;
-}
-
-function ban_new($mask, $category, $reason) {
- ban_add($mask, $category, $reason, &$message);
- $output .= "$message\n";
- print $output;
-}
-
-function ban_display($category = "") {
- global $type2index;
-
- ### initialize variable:
- $category = $category ? $category : 1;
-
- ### Perform query:
- $result = db_query("SELECT * FROM bans WHERE type = $category ORDER BY mask");
-
- ### Generate output:
- $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\">\n";
- $output .= " <TR>\n";
- $output .= " <TH COLSPAN=\"3\">\n";
- $output .= " <FORM ACTION=\"admin.php?section=bans\" METHOD=\"post\">\n";
- $output .= " <SELECT NAME=\"category\">\n";
- for (reset($type2index); $cur = current($type2index); next($type2index)) {
- $output .= " <OPTION VALUE=\"$cur\"". ($cur == $category ? " SELECTED" : "") .">Sort by ". key($type2index) ."</OPTION>\n";
- }
- $output .= " </SELECT>\n";
- $output .= " <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Update\">\n";
- $output .= " </FORM>\n";
- $output .= " </TH>\n";
- $output .= " </TR>\n";
- $output .= " <TR>\n";
- $output .= " <TH>mask</TH>\n";
- $output .= " <TH>reason</TH>\n";
- $output .= " <TH>operations</TH>\n";
- $output .= " </TR>\n";
-
- while ($ban = db_fetch_object($result)) {
- $output .= " <TR><TD>$ban->mask</TD><TD>$ban->reason</TD><TD ALIGN=\"center\"><A HREF=\"admin.php?section=bans&op=delete&category=$category&id=$ban->id\">delete</A></TD></TR>\n";
- }
-
- $output .= " <TR><TD COLSPAN=\"3\"><SMALL>%: matches any number of characters, even zero characters.<BR>_: matches exactly one character.</SMALL></TD></TR>\n";
- $output .= "</TABLE>\n";
- $output .= "<BR><HR>\n";
-
- $output .= "<H3>Add new ban:</H3>\n";
- $output .= "<FORM ACTION=\"admin.php?section=bans\" METHOD=\"post\">\n";
- $output .= "<B>Banmask:</B><BR>\n";
- $output .= "<INPUT TYPE=\"text\" NAME=\"mask\" SIZE=\"35\"><P>\n";
- $output .= "<B>Type:</B><BR>\n";
- $output .= "<SELECT NAME=\"category\"\">\n";
- for (reset($type2index); $cur = current($type2index); next($type2index)) {
- $output .= "<OPTION VALUE=\"$cur\"". ($cur == $category ? " SELECTED" : "") .">". key($type2index) ."</OPTION>\n";
- }
- $output .= "</SELECT><P>\n";
- $output .= "<B>Reason:</B><BR>\n";
- $output .= "<TEXTAREA NAME=\"reason\" COLS=\"50\" ROWS=\"5\"></TEXTAREA><P>\n";
- $output .= "<INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Add ban\"><BR>\n";
- $output .= "</FORM>\n";
- $output .= "<BR><HR>\n";
-
- $output .= "<H3>Ban check:</H3>\n";
- $output .= "<FORM ACTION=\"admin.php?section=bans\" METHOD=\"post\">\n";
- $output .= "<B>Banmask:</B><BR>\n";
- $output .= "<INPUT TYPE=\"text\" NAME=\"mask\" SIZE=\"35\"><P>\n";
- $output .= "<B>Type:</B><BR>\n";
- $output .= "<SELECT NAME=\"category\"\">\n";
- for (reset($type2index); $cur = current($type2index); next($type2index)) {
- $output .= "<OPTION VALUE=\"$cur\"". ($cur == $category ? " SELECTED" : "") .">". key($type2index) ."</OPTION>\n";
- }
- $output .= "</SELECT><P>\n";
- $output .= "<INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Check ban\"><BR>\n";
- $output .= "</FORM>\n";
-
- print $output;
-}
-
-/*
- * Comments administration:
- */
-
-function comment_edit($id) {
- $result = db_query("SELECT c.*, u.userid FROM comments c LEFT JOIN users u ON c.author = u.id WHERE c.cid = $id");
-
- $comment = db_fetch_object($result);
-
- $output .= "<FORM ACTION=\"admin.php?section=comments&op=save&id=$id\" METHOD=\"post\">\n";
-
- $output .= "<P>\n";
- $output .= " <B>Author:</B><BR>\n";
- $output .= " ". format_username($comment->userid, 1) ."\n";
- $output .= "</P>\n";
-
- $output .= "<P>\n";
- $output .= " <B>Subject:</B><BR>\n";
- $output .= " <INPUT TYPE=\"text\" NAME=\"subject\" SIZE=\"50\" VALUE=\"". check_output(check_field($comment->subject)) ."\"><BR>\n";
- $output .= "</P>\n";
-
- $output .= "<P>\n";
- $output .= "<B>Comment:</B><BR>\n";
- $output .= " <TEXTAREA WRAP=\"virtual\" COLS=\"50\" ROWS=\"10\" NAME=\"comment\">". check_output($comment->comment) ."</TEXTAREA><BR>\n";
- $output .= "</P>\n";
-
- $output .= "<P>\n";
- $output .= " <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Save comment\">\n";
- $output .= "</P>\n";
- $output .= "</FORM>\n";
-
- print $output;
-}
-
-function comment_save($id, $subject, $comment) {
- db_query("UPDATE comments SET subject = '". check_input($subject) ."', comment = '". check_input($comment) ."' WHERE cid = $id");
- watchdog("message", "modified comment `$subject'.");
-}
-
-function comment_display($order = "date") {
- ### Initialize variables:
- $fields = array("author" => "author", "date" => "timestamp DESC", "subject" => "subject");
-
- ### Perform SQL query:
- $result = db_query("SELECT c.*, u.userid FROM comments c LEFT JOIN users u ON u.id = c.author ORDER BY c.$fields[$order] LIMIT 50");
-
- ### Display comments:
- $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\">\n";
- $output .= " <TR>\n";
- $output .= " <TH ALIGN=\"right\" COLSPAN=\"5\">\n";
- $output .= " <FORM ACTION=\"admin.php?section=comments\" METHOD=\"post\">\n";
- $output .= " <SELECT NAME=\"order\">\n";
- foreach ($fields as $key=>$value) {
- $output .= " <OPTION VALUE=\"$key\"". ($key == $order ? " SELECTED" : "") .">Sort by $key</OPTION>\n";
- }
- $output .= " </SELECT>\n";
- $output .= " <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Update\">\n";
- $output .= " </FORM>\n";
- $output .= " </TH>\n";
- $output .= " </TR>\n";
-
- $output .= " <TR>\n";
- $output .= " <TH>subject</TH>\n";
- $output .= " <TH>author</TH>\n";
- $output .= " <TH>operations</TH>\n";
- $output .= " </TR>\n";
-
- while ($comment = db_fetch_object($result)) {
- $output .= " <TR><TD><A HREF=\"discussion.php?id=$comment->sid&cid=$comment->cid&pid=$comment->pid#$comment->cid\">". check_output($comment->subject) ."</A></TD><TD>". format_username($comment->userid, 1) ."</TD><TD ALIGN=\"center\"><A HREF=\"admin.php?section=comments&op=edit&id=$comment->cid\">edit</A></TD></TR>\n";
- }
-
- $output .= "</TABLE>\n";
-
- print $output;
-}
-
-/*
- * Statistics administration:
- */
-function stats_display() {
- #
- # Story statistics:
- #
- $result = db_query("SELECT s.subject, c.sid, COUNT(c.sid) AS count, u.userid FROM comments c, stories s LEFT JOIN users u ON s.author = u.id WHERE s.id = c.sid GROUP BY c.sid ORDER BY count DESC LIMIT 20;");
- while ($stat = db_fetch_object($result)) $output1 .= "<I><A HREF=\"discussion.php?id=$stat->sid\">$stat->subject</A></I> by ". format_username($stat->userid, 1) .": ". format_plural($stat->count, "comment", "comments") ."<BR>\n";
- admin_box("Story statistics", $output1);
-
- #
- # Poster statistics:
- #
- $result = db_query("SELECT u.userid, COUNT(s.author) AS count FROM stories s LEFT JOIN users u ON s.author = u.id GROUP BY s.author ORDER BY count DESC LIMIT 20");
- while ($stat = db_fetch_object($result)) $output2 .= "". format_username($stat->userid) .": ". format_plural($stat->count, "story", "stories") ."<BR>\n";
- admin_box("Poster statistics", $output2);
-
- #
- # Category statistics:
- #
- $result = db_query("SELECT category, COUNT(category) AS count FROM stories GROUP by category ORDER BY count DESC");
- while ($stat = db_fetch_object($result)) $output3 .= "$stat->category: ". format_plural($stat->count, "story", "stories") ."<BR>\n";
- admin_box("Category statistics", $output3);
-
- #
- # Theme statistics:
- #
- $result = db_query("SELECT theme, COUNT(id) AS count FROM users GROUP BY theme ORDER BY count DESC");
- while ($stat = db_fetch_object($result)) $output4 .= "<I>$stat->theme</I>-theme: ". format_plural($stat->count, "user", "users") ."<BR>\n";
- admin_box("Theme statistics", $output4);
-}
-
-/*
- * Diary administration:
- */
-function diary_edit($id) {
- $result = db_query("SELECT d.*, u.userid FROM diaries d LEFT JOIN users u ON d.author = u.id WHERE d.id = $id");
-
- $diary = db_fetch_object($result);
-
- $output .= "<FORM ACTION=\"admin.php?section=diaries&op=save&id=$id\" METHOD=\"post\">\n";
-
- $output .= "<P>\n";
- $output .= " <B>Author:</B><BR>\n";
- $output .= " ". format_username($diary->userid, 1) ."\n";
- $output .= "</P>\n";
-
- $output .= "<P>\n";
- $output .= "<B>Diary entry:</B><BR>\n";
- $output .= " <TEXTAREA WRAP=\"virtual\" COLS=\"50\" ROWS=\"10\" NAME=\"text\">". check_output($diary->text) ."</TEXTAREA><BR>\n";
- $output .= "</P>\n";
-
- $output .= "<P>\n";
- $output .= " <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Save diary entry\">\n";
- $output .= "</P>\n";
- $output .= "</FORM>\n";
-
- print $output;
-}
-
-function diary_save($id, $text) {
- db_query("UPDATE diaries SET text = '". check_input($text) ."' WHERE id = $id");
- watchdog("message", "modified diary entry #$id.");
-}
-
-function diary_display($order = "date") {
- ### Initialize variables:
- $fields = array("author" => "author", "date" => "timestamp DESC");
-
- ### Perform SQL query:
- $result = db_query("SELECT d.*, u.userid FROM diaries d LEFT JOIN users u ON u.id = d.author ORDER BY d.$fields[$order] LIMIT 50");
-
- ### Display stories:
- $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\">\n";
- $output .= " <TR>\n";
- $output .= " <TH ALIGN=\"right\" COLSPAN=\"5\">\n";
- $output .= " <FORM ACTION=\"admin.php?section=diaries\" METHOD=\"post\">\n";
- $output .= " <SELECT NAME=\"order\">\n";
- foreach ($fields as $key=>$value) {
- $output .= " <OPTION VALUE=\"$key\"". ($key == $order ? " SELECTED" : "") .">Sort by $key</OPTION>\n";
- }
- $output .= " </SELECT>\n";
- $output .= " <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Update\">\n";
- $output .= " </FORM>\n";
- $output .= " </TH>\n";
- $output .= " </TR>\n";
-
- $output .= " <TR>\n";
- $output .= " <TH>subject</TH>\n";
- $output .= " <TH>author</TH>\n";
- $output .= " <TH>operations</TH>\n";
- $output .= " </TR>\n";
-
- while ($diary = db_fetch_object($result)) {
- $output .= " <TR><TD><A HREF=\"diary.php?op=view&name=$diary->userid\">$diary->userid on ". format_date($diary->date, "small") ."</A></TD><TD>". format_username($diary->userid, 1) ."</TD><TD ALIGN=\"center\"><A HREF=\"admin.php?section=diaries&op=edit&id=$diary->id\">edit</A></TD></TR>\n";
- }
-
- $output .= "</TABLE>\n";
-
- print $output;
-}
-
-/*
- * Home administration:
- */
-function home_display() {
- print "<BR><BR><BIG><CENTER><A HREF=\"\">home</A></CENTER></BIG>\n";
-}
-
-/*
- * Blob administration:
- */
-
-function blob_display() {
- $result = db_query("SELECT * FROM blobs");
-
- ### Generate output:
- while ($block = db_fetch_object($result)) {
- $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\">\n";
- $output .= " <TR><TD ALIGN=\"right\" VALIGN=\"top\">Name:</TD><TD>". check_output($block->name) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\" VALIGN=\"top\">Help:</TD><TD>". check_output($block->help) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\" VALIGN=\"top\">Code:</TD><TD><CODE>". nl2br(htmlentities($block->code)) ."</CODE></TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"right\" VALIGN=\"top\">Operations:</TD><TD><A HREF=\"admin.php?section=blobs&op=edit&id=$block->id\">edit</A>, <A HREF=\"admin.php?section=blobs&op=delete&id=$block->id\">delete</A></TD></TR>\n";
- $output .= "</TABLE>\n";
- $output .= "<BR><BR>\n";
- }
-
- $output .= "<H3>Add new block:</H3>\n";
- $output .= "<FORM ACTION=\"admin.php?section=blobs\" METHOD=\"post\">\n";
- $output .= "<B>Name:</B><BR>\n";
- $output .= "<INPUT TYPE=\"text\" NAME=\"name\" SIZE=\"35\"><P>\n";
- $output .= "<B>Help:</B><BR>\n";
- $output .= "<TEXTAREA NAME=\"help\" COLS=\"50\" ROWS=\"5\"></TEXTAREA><P>\n";
- $output .= "<B>Code:</B><BR>\n";
- $output .= "<TEXTAREA NAME=\"code\" COLS=\"50\" ROWS=\"5\"></TEXTAREA><P>\n";
- $output .= "<INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Add block\"><BR>\n";
- $output .= "</FORM>\n";
- $output .= "<BR><HR>\n";
-
- print $output;
-}
-
-function blob_edit($id) {
- $result = db_query("SELECT * FROM blobs WHERE id = $id");
-
- if ($block = db_fetch_object($result)) {
- $output .= "<FORM ACTION=\"admin.php?section=blobs\" METHOD=\"post\">\n";
- $output .= "<B>Name:</B><BR>\n";
- $output .= "<INPUT TYPE=\"text\" NAME=\"name\" VALUE=\"". check_field($block->name) ."\" SIZE=\"35\"><P>\n";
- $output .= "<B>Help:</B><BR>\n";
- $output .= "<TEXTAREA NAME=\"help\" COLS=\"50\" ROWS=\"5\">$block->help</TEXTAREA><P>\n";
- $output .= "<B>Code:</B><BR>\n";
- $output .= "<TEXTAREA NAME=\"code\" COLS=\"50\" ROWS=\"5\">$block->code</TEXTAREA><P>\n";
- $output .= "<INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"$id\">\n";
- $output .= "<INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Save block\"><BR>\n";
- $output .= "</FORM>\n";
- $output .= "<BR><HR>\n";
- }
-
- print $output;
-}
-
-function blob_save($id, $name, $help, $code) {
- db_query("UPDATE blobs SET name = '". check_input($name) ."', help = '". check_input($help) ."', code = '". check_code($code) ."' WHERE id = $id");
- watchdog("message", "modified block `$name'.");
-}
-
-/*
- * Story administration:
- */
-function story_edit($id) {
- global $categories;
-
- $result = db_query("SELECT s.*, u.userid FROM stories s LEFT JOIN users u ON s.author = u.id WHERE s.id = $id");
- $story = db_fetch_object($result);
-
- $output .= "<FORM ACTION=\"admin.php?section=stories&op=save&id=$id\" METHOD=\"post\">\n";
-
- $output .= "<P>\n";
- $output .= " <B>Author:</B><BR>\n";
- $output .= " ". format_username($story->userid) ."\n";
- $output .= "</P>\n";
-
- $output .= "<P>\n";
- $output .= " <B>Subject:</B><BR>\n";
- $output .= " <INPUT TYPE=\"text\" NAME=\"subject\" SIZE=\"50\" VALUE=\"". check_output(check_field($story->subject)) ."\"><BR>\n";
- $output .= "</P>\n";
-
- $output .= "<P><B>Category:</B><BR>\n";
- $output .= " <SELECT NAME=\"category\">\n";
- for ($i = 0; $i < sizeof($categories); $i++) {
- $output .= " <OPTION VALUE=\"$categories[$i]\" ";
- if ($story->category == $categories[$i]) $output .= "SELECTED";
- $output .= ">$categories[$i]</OPTION>\n";
}
- $output .= "</SELECT>\n";
- $output .= "</P>\n";
-
- $output .= "<P>\n";
- $output .= "<B>Abstract:</B><BR>\n";
- $output .= " <TEXTAREA WRAP=\"virtual\" COLS=\"50\" ROWS=\"10\" NAME=\"abstract\">". check_output($story->abstract) ."</TEXTAREA><BR>\n";
- $output .= "</P>\n";
-
- $output .= "<P>\n";
- $output .= "<B>Editor's note/updates:</B><BR>\n";
- $output .= " <TEXTAREA WRAP=\"virtual\" COLS=\"50\" ROWS=\"10\" NAME=\"updates\">". check_output($story->updates) ."</TEXTAREA><BR>\n";
- $output .= "</P>\n";
-
- $output .= "<P>\n";
- $output .= " <B>Extended story:</B><BR>\n";
- $output .= " <TEXTAREA WRAP=\"virtual\" COLS=\"50\" ROWS=\"15\" NAME=\"article\">". check_output($story->article) ."</TEXTAREA><BR>\n";
- $output .= "</P>\n";
-
- $output .= "<P><B>Status:</B><BR>\n";
- $output .= " <SELECT NAME=\"status\">\n";
- $output .= ($story->status == 0) ? " <OPTION VALUE=\"0\" SELECTED>Deleted story</OPTION>\n" : " <OPTION VALUE=\"0\">Deleted story </OPTION>\n";
- $output .= ($story->status == 1) ? " <OPTION VALUE=\"1\" SELECTED>Pending story</OPTION>\n" : " <OPTION VALUE=\"1\">Pending story</OPTION>\n";
- $output .= ($story->status == 2) ? " <OPTION VALUE=\"2\" SELECTED>Public story</OPTION>\n" : " <OPTION VALUE=\"2\">Public story</OPTION>\n";
- $output .= "</SELECT>\n";
- $output .= "</P>\n";
-
- $output .= "<P>\n";
- $output .= " <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Save story\">\n";
- $output .= "</P>\n";
- $output .= "</FORM>\n";
-
- print $output;
}
-
-function story_save($id, $subject, $abstract, $updates, $article, $category, $status) {
- db_query("UPDATE stories SET subject = '". check_input($subject) ."', abstract = '". check_input($abstract) ."', updates = '". check_input($updates) ."', article = '". check_input($article) ."', category = '". check_input($category) ."', status = '$status' WHERE id = $id");
- watchdog("message", "modified story `$subject'.");
-}
-
-function story_display($order = "date") {
- ### Initialize variables:
- $status = array("deleted", "pending", "public");
- $fields = array("author" => "author", "category" => "category", "date" => "timestamp DESC", "status" => "status DESC");
-
- ### Perform SQL query:
- $result = db_query("SELECT s.*, u.userid FROM stories s LEFT JOIN users u ON u.id = s.author ORDER BY s.$fields[$order]");
+closedir($handle);
- ### Display stories:
- $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"3\" CELLSPACING=\"0\">\n";
- $output .= " <TR>\n";
- $output .= " <TH ALIGN=\"right\" COLSPAN=\"5\">\n";
- $output .= " <FORM ACTION=\"admin.php?section=stories\" METHOD=\"post\">\n";
- $output .= " <SELECT NAME=\"order\">\n";
- foreach ($fields as $key=>$value) {
- $output .= " <OPTION VALUE=\"$key\"". ($key == $order ? " SELECTED" : "") .">Sort by $key</OPTION>\n";
- }
- $output .= " </SELECT>\n";
- $output .= " <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Update\">\n";
- $output .= " </FORM>\n";
- $output .= " </TH>\n";
- $output .= " </TR>\n";
+print "<HR>$output <A HREF=\"\">home</A><HR>";
- $output .= " <TR>\n";
- $output .= " <TH>subject</TH>\n";
- $output .= " <TH>author</TH>\n";
- $output .= " <TH>category</TH>\n";
- $output .= " <TH>status</TH>\n";
- $output .= " <TH>operations</TH>\n";
- $output .= " </TR>\n";
-
- while ($story = db_fetch_object($result)) {
- $output .= " <TR><TD><A HREF=\"discussion.php?id=$story->id\">". check_output($story->subject) ."</A></TD><TD>". format_username($story->userid, 1) ."</TD><TD>$story->category</TD><TD ALIGN=\"center\">". $status[$story->status] ."</TD><TD ALIGN=\"center\"><A HREF=\"admin.php?section=stories&op=edit&id=$story->id\">edit</A></TD></TR>\n";
- }
-
- $output .= "</TABLE>\n";
-
- print $output;
-}
-
-function info_display() {
- include "includes/config.inc";
-
- $output .= "sitename: $site_name<BR>\n";
- $output .= "e-mail address: $contact_email<BR>\n";
- $output .= "send e-mail notifications: $notify<BR>\n";
- $output .= "allowed HTML tags: <I>". htmlspecialchars($allowed_html) ."</I><BR>\n";
- $output .= "anonymous user: $anonymous<BR>\n";
- $output .= "submission post threshold: $submission_post_threshold<BR>\n";
- $output .= "submission dump threshold: $submission_dump_threshold<BR>\n";
-
- admin_box("$site_name settings", $output);
-}
-
-include "includes/config.inc";
-include "includes/function.inc";
-include "includes/database.inc";
-include "includes/watchdog.inc";
-include "includes/admin.inc";
-
-admin_header();
-
-switch ($section) {
- case "stories":
- switch ($op) {
- case "edit":
- story_edit($id);
- break;
- case "Save story":
- story_save($id, $subject, $abstract, $updates, $article, $category, $status);
- story_edit($id);
- break;
- case "Update":
- story_display($order);
- break;
- default:
- story_display();
- }
- break;
- case "comments":
- switch ($op) {
- case "edit":
- comment_edit($id);
- break;
- case "Save comment":
- comment_save($id, $subject, $comment);
- comment_edit($id);
- break;
- case "Update":
- comment_display($order);
- break;
- default:
- comment_display();
- }
- break;
- case "diaries":
- switch ($op) {
- case "edit":
- diary_edit($id);
- break;
- case "Save diary entry":
- diary_save($id, $text);
- diary_edit($id);
- break;
- case "Update":
- diary_display($order);
- break;
- default:
- diary_display();
- }
- break;
- case "accounts":
- switch ($op) {
- case "view":
- account_view($name);
- break;
- case "Update":
- account_display($order);
- break;
- default:
- account_display();
- }
- break;
- case "blobs":
- include "includes/blob.inc";
- switch ($op) {
- case "Add block":
- blob_add($name, $help, $code);
- blob_display();
- break;
- case "Save block":
- blob_save($id, $name, $help, $code);
- blob_display();
- break;
- case "edit":
- blob_edit($id);
- break;
- case "delete":
- blob_delete($id);
- default:
- blob_display();
- }
- break;
- case "bans":
- include "includes/ban.inc";
- switch ($op) {
- case "Add ban":
- ban_new($mask, $category, $reason);
- ban_display($category);
- break;
- case "Check ban":
- ban_check($mask, $category);
- ban_display($category);
- break;
- case "delete":
- ban_delete($id);
- default:
- ban_display($category);
- }
- break;
- case "watchdog":
- switch ($op) {
- case "view":
- watchdog_view($id);
- break;
- case "Update":
- watchdog_display($order);
- break;
- default:
- watchdog_display();
- }
- break;
- case "cron":
- cron_display();
- break;
- case "stats":
- stats_display();
- break;
- case "info":
- info_display();
- break;
- case "home":
- home_display();
- break;
- default:
- print "<BR><BR><CENTER>Welcome to the adminstration center!</CENTER>\n";
+// display administrator body:
+if ($mod) {
+ include "modules/$mod.module";
+ if ($function = $module["admin"]) $function();
}
+// display admin footer:
admin_footer();
-?>
+?> \ No newline at end of file
diff --git a/backend.php b/backend.php
deleted file mode 100644
index 0a2747da3..000000000
--- a/backend.php
+++ /dev/null
@@ -1,124 +0,0 @@
-<?
-
-
-function adminAddChannel() {
- ?>
- <HR>
- <FORM ACTION="backend.php" METHOD="post">
- <P>
- <B>Site name:</B><BR>
- <INPUT TYPE="text" NAME="site" SIZE="50">
- </P>
-
- <P>
- <B>URL:</B><BR>
- <INPUT TYPE="text" NAME="url" SIZE="50">
- </P>
-
- <P>
- <B>Backend file:</B><BR>
- <INPUT TYPE="text" NAME="file" SIZE="50">
- </P>
-
- <P>
- <B>Contact information:</B><BR>
- <INPUT TYPE="text" NAME="contact" SIZE="50">
- </P>
- <INPUT TYPE="submit" NAME="op" VALUE="Add backend">
- </FORM>
- <?
-}
-
-function displayAll() {
- global $theme;
-
- ### Get channel info:
- $result = db_query("SELECT * FROM channel ORDER BY id");
-
- print "<HR>\n";
- print "<TABLE BORDER=\"0\">\n";
- while ($channel = db_fetch_object($result)) {
- if ($state % 3 == 0) print " <TR>\n";
-
- print " <TD ALIGN=\"center\" VALIGN=\"top\" WIDTH=\"33%\">\n";
-
- ### Load backend from database:
- $backend = new backend($channel->id);
-
- ### Read headlines from backend class:
- $content = "";
- for (reset($backend->headlines); $headline = current($backend->headlines); next($backend->headlines)) {
- $content .= "<LI>$headline</LI>\n";
- }
-
- ### Print backend box to screen:
- $theme->box($backend->site, "$content<P ALIGN=\"right\">[ <A HREF=\"$backend->url\">more</A> ]\n");
- print " </TD>\n";
-
- if ($state % 3 == 2) print " </TR>\n";
-
- $state += 1;
- }
- print "</TABLE>\n";
-}
-
-function adminMain() {
- global $theme, $PHP_SELF;
-
- ### Get channel info:
- $result = db_query("SELECT * FROM channel ORDER BY id");
-
- print "<TABLE BORDER=\"0\" WIDTH=\"100%\" CELLSPACING=\"2\" CELLPADDING=\"4\">";
- print "
- <TR BGCOLOR=\"$theme->bgcolor1\"><TD ALIGN=\"center\"><B><FONT COLOR=\"$theme->fgcolor1\">Site</FONT></B></TD><TD ALIGN=\"center\"><B><FONT COLOR=\"$theme->fgcolor1\">Contact</FONT></B></TD><TD ALIGN=\"center\"><B><FONT COLOR=\"$theme->fgcolor1\">Last updated</FONT></B></TD><TD ALIGN=\"center\" COLSPAN=\"2\"><B><FONT COLOR=\"$theme->fgcolor1\">Operations</FONT></B></TD></TR>";
- while ($channel = db_fetch_object($result)) {
- ### Load backend from database:
- $backend = new backend($channel->id);
-
- print "<TR BGCOLOR=\"$theme->bgcolor2\">";
- print " <TD><A HREF=\"$backend->url\">$backend->site</A></TD>";
- print " <TD><A HREF=\"mailto:$backend->contact\">$backend->contact</A></TD>";
- print " <TD ALIGN=\"center\">". round((time() - $backend->timestamp) / 60) ." min. ago</TD>";
- print " <TD ALIGN=\"center\"><A HREF=\"$PHP_SELF?op=refresh&id=$backend->id\">refresh</A></TD>";
- print " <TD ALIGN=\"center\"><A HREF=\"$PHP_SELF?op=delete&id=$backend->id\">delete</A></TD>";
- print "</TR>";
- }
- print "</TABLE>";
- print "<BR><BR>";
-}
-
-include "includes/theme.inc";
-include "includes/backend.inc";
-
-$theme->header();
-
-switch($op) {
- case "refresh":
- $backend = new backend($id);
- $backend->refresh();
- adminMain();
- displayAll();
- adminAddChannel();
- break;
- case "delete":
- print "ID = $id<BR>";
- $backend = new backend($id);
- $backend->dump();
- $backend->delete();
- adminMain();
- displayAll();
- adminAddChannel();
- break;
- case "Add backend":
- $backend = new backend($id, $site, $url, $file, $contact);
- $backend->add();
- // fall through:
- default:
- adminMain();
- displayAll();
- adminAddChannel();
-}
-
-$theme->footer();
-
-?>
diff --git a/diary.php b/diary.php
index 0c8b9a4a7..43f1d5600 100644
--- a/diary.php
+++ b/diary.php
@@ -103,7 +103,7 @@ function diary_edit($id) {
$output .= "<P>\n";
$output .= " <INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"$diary->id\">\n";
- $output .= " <INPUT TYPE=\"hidden\" NAME=\"timesamp\" VALUE=\"$diary->timestamp\">\n";
+ $output .= " <INPUT TYPE=\"hidden\" NAME=\"timestamp\" VALUE=\"$diary->timestamp\">\n";
$output .= " <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Preview diary entry\"> <INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Submit diary entry\">\n";
$output .= "</P>\n";
diff --git a/error.php b/error.php
index 16b3a3173..cae1a1a6f 100644
--- a/error.php
+++ b/error.php
@@ -14,7 +14,7 @@ function error_httpd() {
$message = "500 error - internal server error";
break;
case 404:
- $message = "404 error - document not found";
+ $message = "404 error - `$REDIRECT_URL' not found";
break;
case 403:
$message = "403 error - access denied - forbidden";
diff --git a/includes/admin.inc b/includes/admin.inc
index 2825d728f..27a30e9fb 100644
--- a/includes/admin.inc
+++ b/includes/admin.inc
@@ -1,15 +1,6 @@
<?
-
-function admin_icon($name) {
- global $section;
- if ($name == $section) print " <TD ALIGN=\"center\" BGCOLOR=\"#CCCCCC\"><A HREF=\"admin.php?section=$name\"><IMG SRC=\"images/admin-$name.png\" BORDER=\"0\"></A><BR>$name</TD>\n";
- else print " <TD ALIGN=\"center\" VALIGN=\"middle\"><A HREF=\"admin.php?section=$name\"><IMG SRC=\"images/admin-$name.png\" BORDER=\"0\"></A><BR>$name</TD>\n";
-}
-
function admin_header() {
- global $site_name, $section;
-
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
@@ -23,46 +14,12 @@ function admin_header() {
td { font-family: helvetica, arial; }
</STYLE>
<BODY BGCOLOR="#FFFFFF" LINK="#006699" VLINK="#004499" ALINK="#FF0000">
- <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="2">
- <TR><TD COLSPAN="10"><H1><? echo "$site_name"; ?> administration center</H1></TD></TR>
- <TR><TD BGCOLOR="#000000" COLSPAN="11" WIDTH="100%"><IMG SRC="images/pixel.gif" WIDTH="1" HEIGHT="1" ALT=""></TD></TR>
- <TR>
- <?
- admin_icon("stories");
- admin_icon("comments");
- admin_icon("diaries");
- admin_icon("accounts");
- admin_icon("watchdog");
- admin_icon("blobs");
- admin_icon("cron");
- admin_icon("bans");
- admin_icon("stats");
- admin_icon("info");
- admin_icon("home");
- ?>
- </TR>
- <TR><TD BGCOLOR="#000000" COLSPAN="11" WIDTH="100%"><IMG SRC="images/pixel.gif" WIDTH="1" HEIGHT="0" ALT=""></TD></TR>
- <TR><TD COLSPAN="10">&nbsp;</TD></TR>
- <TR>
- <TD COLSPAN="11">
- <?
-}
-
-function admin_box($title, $body) {
- print "<TABLE BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"2\" WIDTH=\"100%\">\n";
- print " <TR><TD><FONT COLOR=\"#83997A\"><B>$title</B></A></TD></TR>\n";
- print " <TR><TD BGCOLOR=\"#000000\" WIDTH=\"100%\"><IMG SRC=\"images/pixel.gif\" WIDTH=\"1\" HEIGHT=\"0\" ALT=\"\"></TD></TR>\n";
- print " <TR><TD>&nbsp;</TD></TR>\n";
- print " <TR><TD>$body</TD></TR>\n";
- print "</TABLE>\n";
- print "<BR><BR>\n";
+ <H1>Administration center</H1>
+ <?
}
function admin_footer() {
?>
- </TD>
- </TR>
- </TABLE>
</BODY>
</HTML>
<?
diff --git a/includes/blob.inc b/includes/blob.inc
deleted file mode 100644
index dab03ff5e..000000000
--- a/includes/blob.inc
+++ /dev/null
@@ -1,22 +0,0 @@
-<?
-
-function blob_get($name) {
- $result = db_query("SELECT * FROM blobs WHERE name = '$name'");
-
- if ($blob = db_fetch_object($result)) {
- return eval($blob->code);
- }
- else {
- watchdog("error", "blob '$name' does not exist");
- }
-}
-
-function blob_add($name, $help, $code, $message = "") {
- $result = db_query("INSERT INTO blobs (name, help, code) VALUES ('". check_input($name) ."', '". check_input($help) ."', '". check_code($code) ."')");
-}
-
-function blob_delete($id) {
- $result = db_query("DELETE FROM blobs WHERE id = $id");
-}
-
-?> \ No newline at end of file
diff --git a/includes/database.inc b/includes/database.inc
index 8e0183048..56e230003 100644
--- a/includes/database.inc
+++ b/includes/database.inc
@@ -7,10 +7,9 @@
* just adjust the handlers to your needs.
*/
-function db_connect() {
- global $db_host, $db_name, $db_pass, $db_name;
- mysql_pconnect($db_host, $db_name, $db_pass) or die(mysql_Error());
- mysql_select_db($db_name) or die ("Unable to select database");
+function db_connect($host, $name, $pass, $base) {
+ mysql_pconnect($host, $name, $pass) or die(mysql_Error());
+ mysql_select_db($base) or die ("unable to select database");
// NOTE: we are using a persistent connection!
}
@@ -49,6 +48,6 @@ function db_result($qid, $field) {
#
# Automatically connect to database:
#
-db_connect();
+db_connect($db_host, $db_name, $db_pass, $db_name);
?>
diff --git a/includes/droplet.inc b/includes/droplet.inc
new file mode 100644
index 000000000..3f1f3b209
--- /dev/null
+++ b/includes/droplet.inc
@@ -0,0 +1,22 @@
+<?
+
+function droplet_get($name) {
+ $result = db_query("SELECT * FROM droplets WHERE name = '$name'");
+
+ if ($droplet = db_fetch_object($result)) {
+ return eval($droplet->code);
+ }
+ else {
+ watchdog("error", "droplet '$name' does not exist");
+ }
+}
+
+function droplet_add($name, $help, $code, $message = "") {
+ $result = db_query("INSERT INTO droplets (name, help, code) VALUES ('". check_input($name) ."', '". check_input($help) ."', '". check_code($code) ."')");
+}
+
+function droplet_delete($id) {
+ $result = db_query("DELETE FROM droplets WHERE id = $id");
+}
+
+?>
diff --git a/includes/function.inc b/includes/function.inc
index 3d4f5253f..7c1afc7ae 100644
--- a/includes/function.inc
+++ b/includes/function.inc
@@ -10,10 +10,10 @@ function load_theme() {
global $user, $themes;
if ($user->theme && file_exists($themes[$user->theme][0])) {
- include $themes[$user->theme][0];
+ include_once $themes[$user->theme][0];
}
else {
- include $themes[key($themes)][0];
+ include_once $themes[key($themes)][0];
}
return new Theme();
}
@@ -90,7 +90,7 @@ function format_data($field, $replacement = "<I>na</I>") {
}
function format_username($username, $admin = 0) {
- if ($username) return ($admin) ? "<A HREF=\"admin.php?section=accounts&op=view&name=$username\">$username</A>" : "<A HREF=\"account.php?op=view&name=$username\">$username</A>";
+ if ($username) return ($admin) ? "<A HREF=\"admin.php?mod=account&op=view&name=$username\">$username</A>" : "<A HREF=\"account.php?op=view&name=$username\">$username</A>";
else { global $anonymous; return $anonymous; }
}
diff --git a/includes/theme.inc b/includes/theme.inc
index 70fa3ecc7..d1c3540e5 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -1,12 +1,12 @@
<?
-include "includes/config.inc";
-include "includes/database.inc";
-include "includes/watchdog.inc";
-include "includes/function.inc";
-include "includes/blob.inc";
-include "includes/widget.inc";
-include "includes/user.inc";
+include_once "includes/". getenv("HTTP_HOST") .".conf";
+include_once "includes/database.inc";
+include_once "includes/watchdog.inc";
+include_once "includes/function.inc";
+include_once "includes/droplet.inc";
+include_once "includes/widget.inc";
+include_once "includes/user.inc";
global $user;
diff --git a/module.php b/module.php
index d0cb55c5c..a6520c76c 100644
--- a/module.php
+++ b/module.php
@@ -1,3 +1,7 @@
-<?
+<?
+
include "modules/$mod.module";
+
+if ($function = $module["page"]) $function();
+
?>
diff --git a/includes/backend.inc b/modules/backend.class
index 9ceba3bf3..b564344d5 100644
--- a/includes/backend.inc
+++ b/modules/backend.class
@@ -1,6 +1,5 @@
<?
-
class backend {
// Channel properties:
@@ -17,17 +16,12 @@ class backend {
// 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:
+ // Get channel info:
$result = db_query("SELECT * FROM channel WHERE id = '$id' OR site = '$site'");
if ($channel = db_fetch_object($result)) {
- ### Initialize internal variables:
+ // Initialize internal variables:
$this->id = $channel->id;
$this->site = $channel->site;
$this->file = $channel->file;
@@ -35,10 +29,10 @@ class backend {
$this->contact = $channel->contact;
$this->timestamp = $channel->timestamp;
- ### Check to see whether we have to update our headlines first:
+ // Check to see whether we have to update our headlines first:
if (time() - $this->timestamp > $timout) $this->url2sql();
- ### Read headlines:
+ // 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>");
@@ -53,14 +47,9 @@ class backend {
}
}
- #####
- # 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:
+ // Decode URL:
$url = parse_url($this->file);
$host = $url[host];
$port = $url[port] ? $url[port] : 80;
@@ -68,11 +57,11 @@ class backend {
// print "<PRE><B>Debug:</B> $url - $host - $port - $path</PRE>";
- ### Retrieve data from website:
+ // Retrieve data from website:
$fp = fsockopen($host, $port, &$errno, &$errstr, $timout);
if ($fp) {
- ### Get data from URL:
+ // Get data from URL:
fputs($fp, "GET $path HTTP/1.0\n");
fputs($fp, "User-Agent: headline grabber\n");
fputs($fp, "Host: ". $host ."\n");
@@ -84,36 +73,36 @@ class backend {
if (strstr($data, "200 OK")) {
- ### Remove existing entries:
+ // Remove existing entries:
$result = db_query("DELETE FROM headlines WHERE id = $this->id");
- ### Strip all 'junk':
+ // 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:
+ // Iterating through our data processing each entry/item:
$items = explode("</item>", $data);
$number = 0;
for (reset($items); $item = current($items); next($items)) {
- ### Extract data:
+ // Extract data:
$link = ereg_replace(".*<link>", "", $item);
$link = ereg_replace("</link>.*", "", $link);
$title = ereg_replace(".*<title>", "", $item);
$title = ereg_replace("</title>.*", "", $title);
- ### Clean headlines:
+ // Clean headlines:
$title = stripslashes($title);
- ### Count the number of stories:
+ // Count the number of stories:
$number += 1;
- ### Insert item in database:
+ // 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:
+ // Mark channels as being updated:
$result = db_query("UPDATE channel SET timestamp = '". time() ."' WHERE id = $this->id");
$this->timestamp = time();
}
@@ -122,111 +111,67 @@ class backend {
}
}
-
- #####
- # 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:
+ // 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:
+ // Check to see whether we have to update our headlines first:
if (time() - $this->timestamp > $timout) $this->url2sql();
- ### Grab headlines from database:
+ // 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:
+ // 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:
+ // 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:
+ // 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) ."', 42)");
}
-
-
- #####
- # Syntax.......: delete()
- # Description..: Deletes this backend
- #
+
function delete() {
- ### Delete channel:
+ // Delete channel:
$result = db_query("DELETE FROM channel WHERE id = $this->id");
- ### Delete headlines:
+ // 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:
+ // Delete headlines:
$result = db_query("DELETE FROM headlines WHERE id = $this->id");
- ### Mark channel as invalid to enforce an update:
+ // 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>";
diff --git a/themes/marvin/marvin.theme b/themes/marvin/marvin.theme
index 631ec7eb0..0ac8de30a 100644
--- a/themes/marvin/marvin.theme
+++ b/themes/marvin/marvin.theme
@@ -260,7 +260,7 @@
display_old_headlines($this);
### Display calendar:
- display_calendar($this, $date);
+ $this->box("Browse archives", droplet_get("calendar"));
### Display new diary entries:
display_new_diaries($this);