diff options
author | Dries Buytaert <dries@buytaert.net> | 2000-12-14 14:20:06 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2000-12-14 14:20:06 +0000 |
commit | 8a77861958367a0364675f93c8d49b953e4d8566 (patch) | |
tree | 95575e662c8c6b852b1c4097537e9283887564c5 | |
parent | 7a45d84a9f9458387bf4f57ac5a520f31c1604ab (diff) | |
download | brdo-8a77861958367a0364675f93c8d49b953e4d8566.tar.gz brdo-8a77861958367a0364675f93c8d49b953e4d8566.tar.bz2 |
- large batch of updates
-rw-r--r-- | admin.php | 785 | ||||
-rw-r--r-- | backend.php | 124 | ||||
-rw-r--r-- | diary.php | 2 | ||||
-rw-r--r-- | error.php | 2 | ||||
-rw-r--r-- | includes/admin.inc | 47 | ||||
-rw-r--r-- | includes/blob.inc | 22 | ||||
-rw-r--r-- | includes/database.inc | 9 | ||||
-rw-r--r-- | includes/droplet.inc | 22 | ||||
-rw-r--r-- | includes/function.inc | 6 | ||||
-rw-r--r-- | includes/theme.inc | 14 | ||||
-rw-r--r-- | module.php | 6 | ||||
-rw-r--r-- | modules/backend.class (renamed from includes/backend.inc) | 107 | ||||
-rw-r--r-- | themes/marvin/marvin.theme | 2 |
13 files changed, 94 insertions, 1054 deletions
@@ -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(); - -?> @@ -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"; @@ -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"> </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> </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); |