summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKjartan Mannes2001-11-26 19:59:57 (GMT)
committer Kjartan Mannes2001-11-26 19:59:57 (GMT)
commitb6451185d05157746d1291b1becd9497fe621057 (patch)
tree09246c2e3e7ed75bc555ff4de0aad197dde8f822
parent9688b2e4e84dbdc96188d56e086486ac8319ea86 (diff)
- fixed a bug in blog.module that would let users edit other people blogs.
-rw-r--r--modules/blog.module910
1 files changed, 458 insertions, 452 deletions
diff --git a/modules/blog.module b/modules/blog.module
index d036679..1c483a3 100644
--- a/modules/blog.module
+++ b/modules/blog.module
@@ -1,452 +1,458 @@
-<?php
-
-class Blog {
- function Blog($blog) {
- global $user;
- $this = new Node($blog);
- $this->body = $blog[body];
- }
-}
-
-function blog_help() {
- ?>
- <p>Drupal's blog module allows registered users to maintain an online blog or diary. It provides easy-to-write and easy-to-read online diaries or journals that can be filled with daily thoughts, poetry, boneless blabber, spiritual theories, intimate details, valuable experiences, cynical rants, semi-coherent comments, writing experiments, artistic babblings, critics on current facts, fresh insights, diverse dreams, chronicles and mumbling madness available for public consumption.</p>
- <?php
-}
-
-function blog_perm() {
- return array("administer blogs", "access blogs", "post blogs");
-}
-
-function blog_status() {
- return array(dumped, posted);
-}
-
-function blog_summary($node) {
- return $node->body;
-}
-
-function blog_feed_user($name = 0, $date = 0) {
- global $user;
-
- $name = check_input($name ? $name : $user->name);
- $date = check_input($date ? $date : time());
-
- $result = db_query("SELECT n.nid, n.title, n.timestamp, b.body FROM blog b LEFT JOIN node n ON b.nid = n.nid LEFT JOIN users u ON n.author = u.id WHERE u.name = '$name' AND n.timestamp > '". ($date - 2592000) ."' ORDER BY b.lid DESC LIMIT 15");
- while ($blog = db_fetch_object($result)) {
- $items .= format_rss_item($blog->title, path_uri() ."node.php?id=$blog->nid", $blog->body);
- }
-
- $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
- $output .= "<rss version=\"0.91\">\n";
- $output .= format_rss_channel("$name's blog", path_uri() ."module.php?mod=blog&op=view&name=". urlencode($name), "$name's blog", $items);
- $output .= "</rss>\n";
-
- header("Content-Type: text/xml");
-
- print $output;
-
-}
-
-function blog_feed_last() {
- $result = db_query("SELECT n.nid, n.title, n.timestamp, b.body, u.name FROM blog b LEFT JOIN node n ON b.nid = n.nid LEFT JOIN users u ON n.author = u.id ORDER BY b.lid DESC LIMIT 15");
- while ($blog = db_fetch_object($result)) {
- $items .= format_rss_item($blog->title, path_uri() ."module.php?mod=blog&op=view&name=". urlencode($blog->name), $blog->body);
- }
-
- $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
- $output .= "<rss version=\"0.91\">\n";
- $output .= format_rss_channel(variable_get("site_name", "drupal") .": user blogs", path_uri() ."module.php?mod=blog", "Recently updated blogs.", $items);
- $output .= "</rss>\n";
-
- header("Content-Type: text/xml");
-
- print $output;
-
-}
-
-function blog_page_user($name = 0, $date = 0) {
- global $theme, $user;
-
- $name = check_input($name ? $name : $user->name);
- $date = check_input($date ? $date : time());
-
- $result = db_query("SELECT n.nid, n.title, n.comment, COUNT(c.cid) AS comments, n.timestamp, b.body FROM blog b LEFT JOIN node n ON b.nid = n.nid LEFT JOIN users u ON n.author = u.id LEFT JOIN comments c ON n.nid = c.lid WHERE u.name = '$name' AND n.timestamp <= '$date' AND n.timestamp >= '". ($date - 2592000) ."' GROUP BY n.nid ORDER BY n.nid DESC LIMIT 20");
-
- $output .= "<table border=\"0\" cellpadding=\"4\" cellspacing=\"4\">";
-
- while ($blog = db_fetch_object($result)) {
-
- $links = array();
-
- if ($date != date("dny", $blog->timestamp)) {
- $date = date("dny", $blog->timestamp);
- $output .= "<tr><td colspan=\"2\"><b><a href=\"module.php?mod=blog&name=". urlencode($name) ."&date=". mktime(23, 59, 59, date("n", $blog->timestamp), date("d", $blog->timestamp), date("Y", $blog->timestamp)) ."\">". format_date($blog->timestamp, custom, "d M Y") .":</a></b></td></tr>";
- }
-
- if ($user->id && $user->name == $name) {
- $links[] = "<a href=\"submit.php?mod=blog&op=edit&id=$blog->nid\">". t("edit") ."</a>";
- }
-
- if ($user->id && user_access("post blogs")) {
- $links[] = "<a href=\"submit.php?mod=blog&type=blog&id=$blog->nid\">". t("blog it") ."</a>";
- }
-
- if ($blog->comment) {
- $links[] = "<a href=\"node.php?id=$blog->nid\">". format_plural($blog->comments, t("comment"), t("comments")) ."</a>";
- }
-
- $output .= "<tr><td><div style=\"margin-left: 20px;\"><b>". check_output($blog->title) ."</b></div></td><td align=\"right\">". $theme->links($links) ."</td></tr>";
- $output .= "<tr><td colspan=\"2\"><div style=\"margin-left: 40px;\">". check_output($blog->body, 1) ."</div><br /></td></tr>";
-
- }
-
- $output .= "</table>";
- $output .= "<a href=\"module.php?mod=blog&op=feed&name=". urlencode($name) ."\"><img src=\"". $theme->image("xml.gif") ."\" width=\"36\" height=\"14\" align=\"right\" border=\"0\" /></a>\n";
-
- $theme->box(strtr(t("%a's blog"), array("%a" => $name)), $output, "main");
-}
-
-function blog_page_last() {
- global $theme, $user;
-
- $result = db_query("SELECT n.author, n.nid, n.title, n.comment, COUNT(c.cid) AS comments, n.timestamp, b.body, u.name FROM blog b LEFT JOIN node n ON b.nid = n.nid LEFT JOIN users u ON n.author = u.id LEFT JOIN comments c ON n.nid = c.lid GROUP BY n.nid ORDER BY n.nid DESC LIMIT 20");
-
- $output .= "<table border=\"0\" cellpadding=\"4\" cellspacing=\"4\">";
-
- while ($blog = db_fetch_object($result)) {
-
- $links = array();
-
- $links[] = "<a href=\"module.php?mod=blog&op=view&name=". urlencode($blog->name) ."\">". strtr(t("%a's blog"), array("%a" => $blog->name)) ."</a>";
-
- if ($blog->author == $user->id) {
- $links[] = "<a href=\"submit.php?mod=blog&op=edit&id=$blog->nid\">". t("edit") ."</a>";
- }
-
- if ($user->id && user_access("post blogs")) {
- $links[] = "<a href=\"submit.php?mod=blog&type=blog&id=$blog->nid\">". t("blog it") ."</a>";
- }
-
- if ($blog->comment) {
- $links[] = "<a href=\"node.php?id=$blog->nid\">". format_plural($blog->comments, t("comment"), t("comments")) ."</a>";
- }
-
- $output .= "<tr><td><b>". check_output($blog->title) ."</b></td><td align=\"right\">". $theme->links($links) ."</td></tr>";
- $output .= "<tr><td colspan=\"2\"><div style=\"margin-left: 20px;\">". check_output($blog->body, 1) ."</div><br /></td></tr>";
-
- }
-
- $output .= "</table>";
- $output .= "<a href=\"module.php?mod=blog&op=feed\"><img src=\"". $theme->image("xml.gif") ."\" width=\"36\" height=\"14\" align=\"right\" border=\"0\" /></a>\n";
-
- $theme->box(t("User blogs"), $output, "main");
-}
-
-function blog_remove($nid) {
- global $status, $user;
-
- $blog = node_get_object(array(nid => $nid, type => "blog"));
-
- if ($blog && $blog->author == $user->id) {
- node_save(array(nid => $nid), array(status => $status[dumped]));
- node_del(array(type => "blog", nid => $nid));
- }
-}
-
-function blog_view($node, $main = 0) {
- global $theme;
-
- $theme->node($node, $main);
-}
-
-function blog_form($edit = array()) {
- global $REQUEST_URI, $id, $mod, $type, $user, $theme;
-
- if ($user->id && (user_access("administer blogs") || user_access("post blogs"))) {
- if ($mod == "node" || $edit[type] == "blog") {
- // do nothing
- }
- else if ($type == "blog") {
- $item = node_get_object(array(type => "blog", nid => $id));
- $edit["title"] = $item->title;
- $edit["body"] = "<i>". $item->body ."</i> [<a href=\"module.php?mod=blog&name=". urlencode($item->name) ."&date=$item->timestamp\">$item->name</a>]";
- }
- else if ($type == "import") {
- $item = db_fetch_object(db_query("SELECT i.*, f.title as ftitle, f.link as flink FROM item i, feed f WHERE i.iid = '". check_input($id) ."' AND i.fid = f.fid"));
- $edit["title"] = $item->title;
- $edit["body"] = "<a href=\"$item->link\">$item->title</a> - <i>". check_output($item->description) ."</i> [<a href=\"$item->flink\">$item->ftitle</a>]\n";
- }
-
- if ($edit["title"]) {
- $form .= blog_view(new Blog(node_preview($edit)));
- }
-
- $form .= form_textfield(t("Subject"), "title", $edit["title"], 50, 64);
- $form .= form_textarea(t("Body"), "body", $edit["body"], 70, 15, t("Allowed HTML tags") .": ". htmlspecialchars(variable_get("allowed_html", "")));
-
- $form .= form_hidden("type", "blog");
-
- if ($edit["nid"] > 0) {
- $form .= form_hidden("nid", $edit["nid"]);
- }
-
- if (!$edit) {
- $form .= form_submit(t("Preview"));
- }
- else if ($edit && !$edit["title"]) {
- $form .= "<font color=\"red\">". t("Warning: you did not supply a subject.") ."</font><p>\n";
- $form .= form_submit(t("Preview"));
- }
- else if ($edit && !$edit["body"]) {
- $form .= "<font color=\"red\">". t("Warning: you did not supply any text.") ."</font><p>\n";
- $form .= form_submit(t("Preview"));
- }
- else {
- $form .= form_submit(t("Preview"));
- $form .= form_submit(t("Submit"));
- }
-
- return form($REQUEST_URI, $form);
- }
- else {
- return message_access();
- }
-}
-
-function blog_save($edit) {
- global $status, $user;
-
- if ($user->id && (user_access("administer blogs") || user_access("post blogs"))) {
- if ($edit["nid"]) {
- node_save($edit, array(title, body, type => "blog"));
- }
- else {
- node_save($edit, array(attributes => node_attributes_save("blog", $edit), author => $user->id, body, comment => variable_get("blog_comment", 0), moderate => variable_get("blog_moderate", ""), promote => variable_get("blog_promote", 0), score => 0, status => variable_get("blog_status", $status[posted]), timestamp => time(), title, type => "blog", votes => 0));
- }
- }
-}
-
-function blog_edit_history($nid) {
- global $user;
-
- $result = db_query("SELECT n.nid, n.title, n.timestamp, b.body FROM blog b LEFT JOIN node n ON b.nid = n.nid WHERE n.author = '". check_input($user->id) ."' AND n.nid <= '". check_input($nid) ."' ORDER BY b.lid DESC LIMIT 15");
-
- $output .= "<table cellpadding=\"3\" cellspacing=\"3\" border=\"0\" width=\"100%\">";
- while ($blog = db_fetch_object($result)) {
- $output .= "<tr><td><b>". check_output($blog->title) ."</b><br />". check_output($blog->body, 1) ."</td><td><a href=\"submit.php?mod=blog&op=edit&id=$blog->nid\">". t("edit") ."</a></td><td><a href=\"submit.php?mod=blog&op=delete&id=$blog->nid\">". t("delete") ."</a></td></tr>\n";
- }
- $output .= "</table>";
-
- return $output;
-}
-
-function blog_page() {
- global $theme, $op, $name, $date;
-
- if (user_access("access blogs")) {
- switch ($op) {
- case "feed":
- if ($name) {
- blog_feed_user($name, $date);
- }
- else {
- blog_feed_last();
- }
- break;
- default:
- $theme->header();
- if ($name) {
- blog_page_user($name, $date);
- }
- else {
- blog_page_last();
- }
- $theme->footer();
- }
- }
- else {
- $theme->header();
- $theme->box(t("Access denied"), message_access());
- $theme->footer();
- }
-
-}
-
-function blog_user() {
- global $op, $id, $edit, $theme, $user;
-
- if (user_access("post blogs")) {
- switch ($op) {
- case "delete":
- blog_remove($id);
- blog_page_user($user->name, time());
- break;
- case "edit":
- $theme->box(t("Submit a blog"), blog_form(node_get_array(array("nid" => $id, "type" => "blog"))), "main");
- $theme->box(t("Older blogs"), blog_edit_history($id), "main");
- break;
- case t("Preview"):
- $theme->box(t("Preview Blog"), blog_form($edit), "main");
- break;
- case t("Submit"):
- blog_save($edit);
- blog_page_user($user->name, time());
- break;
- default:
- $theme->box(t("Submit a blog"), blog_form($edit), "main");
- }
- }
-}
-
-
-function blog_link($type, $node = 0) {
- global $user;
-
- if ($type == "page" && user_access("access blogs")) {
- $links[] = "<a href=\"module.php?mod=blog\">". t("user blogs") ."</a>";
- }
-
- if ($type == "menu" && user_access("post blogs")) {
- $links[] = "<a href=\"submit.php?mod=blog\">". t("add blog entry") ."</a>";
- $links[] = "<a href=\"module.php?mod=blog&op=view&name=". urlencode($user->name) ."\">". t("view your blog") ."</a>";
- }
-
- if ($type == "node" && $node->type == "blog") {
- $links[] = "<a href=\"module.php?mod=blog&op=view&name=". urlencode($node->name) ."\">". strtr(t("%a's blog"), array("%a" => $node->name)) ."</a>";
- }
-
- return $links ? $links : array();
-}
-
-
-function blog_block() {
- global $name, $date, $user, $mod;
-
- $result = db_query("SELECT u.name, n.timestamp, n.title, n.nid FROM node n LEFT JOIN users u ON n.author = u.id WHERE n.type = 'blog' ORDER BY n.nid DESC LIMIT 10");
- while ($node = db_fetch_object($result)) {
- $output .= "<a href=\"module.php?mod=blog&op=view&name=". urlencode($node->name) ."\">". check_output($node->title) ."</a><br />\n";
- }
-
- $block[0]["subject"] = "<a href=\"module.php?mod=blog\">". t("User blogs") ."</a>";
- $block[0]["content"] = $output;
- $block[0]["info"] = t("User blogs");
- $block[0]["link"] = "module.php?mod=blog";
-
- $date = $date ? $date : time();
- $name = $name ? $name : $user->name;
-
- if (($mod == "blog") || ($mod == "block")) {
- // Only show this block on "blog pages" and in the admin block section.
- $calendar = new BlogCalendar($name, $date);
- $block[1]["subject"] = "<a href=\"module.php?mod=blog&name=". urlencode($name) ."\">" . t("Browse blog") . "</a>";
- $block[1]["content"] = $calendar->display();
- $block[1]["info"] = t("Calendar to browse blogs");
- }
-
- return $block;
-}
-
-
-function blog_search($keys) {
- global $status, $user;
- $result = db_query("SELECT n.*, b.* FROM blog b LEFT JOIN node n ON n.nid = b.nid AND n.lid = b.lid WHERE (n.title LIKE '%$keys%' OR b.body LIKE '%$keys%') ORDER BY n.timestamp DESC LIMIT 20");
- while ($blog = db_fetch_object($result)) {
- $find[$i++] = array("title" => check_output($blog->title), "link" => (user_access("administer nodes") ? "admin.php?mod=node&type=blog&op=edit&id=$blog->nid" : "node.php?id=$blog->nid"), "user" => $blog->name, "date" => $blog->timestamp);
- }
- return $find;
-}
-
-class BlogCalendar {
- var $date;
- var $name;
-
- function BlogCalendar($name, $date) {
- $this->name = urlencode($name);
-
- // Prevent future dates:
- $today = mktime(23, 59, 59, date("n", time()), date("d", time()), date("Y", time()));
- $this->date = (($date && $date <= $today) ? $date : $today);
- $this->date = mktime(23, 59, 59, date("n", $this->date), date("d", $this->date), date("Y", $this->date));
- }
-
- function display() {
- // Extract information from the given date:
- $month = date("n", $this->date);
- $year = date("Y", $this->date);
- $day = date("d", $this->date);
-
- // Extract today's date:
- $today = mktime(23, 59, 59, date("n", time()), date("d", time()), date("Y", time()));
-
- // Extract the timestamp of the last day of today's month:
- $thislast = mktime(23, 59, 59, date("n", time()), date("t", time()), date("Y", time()));
-
- // Extract first day of the month:
- $first = date("w", mktime(0, 0, 0, $month, 1, $year));
-
- // Extract last day of the month:
- $last = date("t", mktime(0, 0, 0, $month, 1, $year));
-
- // Calculate previous and next months dates and check for shorter months (28/30 days)
- $prevmonth = mktime(23, 59, 59, $month - 1, 1, $year);
- $prev = mktime(23, 59, 59, $month - 1, min(date("t", $prevmonth), $day), $year);
- $nextmonth = mktime(23, 59, 59, $month + 1, 1, $year);
- $next = mktime(23, 59, 59, $month + 1, min(date("t", $nextmonth), $day), $year);
-
- // Generate calendar header:
- $output .= "\n<!-- calendar -->\n";
- $output .= "<TABLE WIDTH=\"100%\" BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"1\">\n";
- $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"7\"><B><A HREF=\"module.php?mod=blog&name=". urlencode($this->name) ."&date=$prev\" STYLE=\"text-decoration: none;\">&lt;&lt;</A> &nbsp; ". date("F Y", $this->date) ." &nbsp; " . ($next <= $thislast ? "<A HREF=\"module.php?mod=blog&name=". urlencode($this->name) ."&date=$next\" STYLE=\"text-decoration: none;\">&gt;&gt;</A>" : "&gt;&gt;") . "<B></TD></TR>\n";
-
- // Generate the days of the week:
- $output .= " <TR>";
- $somesunday = mktime(0, 0, 0, 3, 20, 1994);
- for ($i = 0; $i < 7; $i++) {
- $output .= "<TD ALIGN=\"center\">" . substr(ucfirst(t(date("l", $somesunday + $i * 86400))), 0, 1) . "</TD>";
- }
- $output .= "</TR>\n";
-
- // Initialize temporary variables:
- $nday = 1;
- $sday = $first;
-
- // Loop through all the days of the month:
- while ($nday <= $last) {
- // Set up blank days for first week of the month:
- if ($first) {
- $output .= " <TR><TD COLSPAN=\"$first\">&nbsp</TD>\n";
- $first = 0;
- }
-
- // Start every week on a new line:
- if ($sday == 0) $output .= " <TR>\n";
-
- // Print one cell:
- $date = mktime(23, 59, 59, $month, $nday, $year);
- if ($date == $this->date) $output .= " <TD ALIGN=\"center\" BGCOLOR=\"#CCCCCC\"><B>$nday</B></TD>\n";
- else if ($date > $today) $output .= " <TD ALIGN=\"center\">$nday</TD>\n";
- else $output .= " <TD ALIGN=\"center\"><A HREF=\"module.php?mod=blog&name=". urlencode($this->name) ."&date=$date\" STYLE=\"text-decoration: none;\">$nday</A></TD>\n";
-
- // Start every week on a new line:
- if ($sday == 6) $output .= " </TR>\n";
-
- // Update temporary variables:
- $sday++;
- $sday = $sday % 7;
- $nday++;
- }
-
- // Complete the calendar:
- if ($sday) {
- $end = 7 - $sday;
- $output .= " <TD COLSPAN=\"$end\">&nbsp;</TD>\n </TR>\n";
- }
- $output .= "</TABLE>\n\n";
-
- // Return calendar:
- return $output;
- }
-}
-
-?>
+<?php
+
+class Blog {
+ function Blog($blog) {
+ global $user;
+ $this = new Node($blog);
+ $this->body = $blog[body];
+ }
+}
+
+function blog_help() {
+ ?>
+ <p>Drupal's blog module allows registered users to maintain an online blog or diary. It provides easy-to-write and easy-to-read online diaries or journals that can be filled with daily thoughts, poetry, boneless blabber, spiritual theories, intimate details, valuable experiences, cynical rants, semi-coherent comments, writing experiments, artistic babblings, critics on current facts, fresh insights, diverse dreams, chronicles and mumbling madness available for public consumption.</p>
+ <?php
+}
+
+function blog_perm() {
+ return array("administer blogs", "access blogs", "post blogs");
+}
+
+function blog_status() {
+ return array(dumped, posted);
+}
+
+function blog_summary($node) {
+ return $node->body;
+}
+
+function blog_feed_user($name = 0, $date = 0) {
+ global $user;
+
+ $name = check_input($name ? $name : $user->name);
+ $date = check_input($date ? $date : time());
+
+ $result = db_query("SELECT n.nid, n.title, n.timestamp, b.body FROM blog b LEFT JOIN node n ON b.nid = n.nid LEFT JOIN users u ON n.author = u.id WHERE u.name = '$name' AND n.timestamp > '". ($date - 2592000) ."' ORDER BY b.lid DESC LIMIT 15");
+ while ($blog = db_fetch_object($result)) {
+ $items .= format_rss_item($blog->title, path_uri() ."node.php?id=$blog->nid", $blog->body);
+ }
+
+ $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
+ $output .= "<rss version=\"0.91\">\n";
+ $output .= format_rss_channel("$name's blog", path_uri() ."module.php?mod=blog&op=view&name=". urlencode($name), "$name's blog", $items);
+ $output .= "</rss>\n";
+
+ header("Content-Type: text/xml");
+
+ print $output;
+
+}
+
+function blog_feed_last() {
+ $result = db_query("SELECT n.nid, n.title, n.timestamp, b.body, u.name FROM blog b LEFT JOIN node n ON b.nid = n.nid LEFT JOIN users u ON n.author = u.id ORDER BY b.lid DESC LIMIT 15");
+ while ($blog = db_fetch_object($result)) {
+ $items .= format_rss_item($blog->title, path_uri() ."module.php?mod=blog&op=view&name=". urlencode($blog->name), $blog->body);
+ }
+
+ $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
+ $output .= "<rss version=\"0.91\">\n";
+ $output .= format_rss_channel(variable_get("site_name", "drupal") .": user blogs", path_uri() ."module.php?mod=blog", "Recently updated blogs.", $items);
+ $output .= "</rss>\n";
+
+ header("Content-Type: text/xml");
+
+ print $output;
+
+}
+
+function blog_page_user($name = 0, $date = 0) {
+ global $theme, $user;
+
+ $name = check_input($name ? $name : $user->name);
+ $date = check_input($date ? $date : time());
+
+ $result = db_query("SELECT n.nid, n.title, n.comment, COUNT(c.cid) AS comments, n.timestamp, b.body FROM blog b LEFT JOIN node n ON b.nid = n.nid LEFT JOIN users u ON n.author = u.id LEFT JOIN comments c ON n.nid = c.lid WHERE u.name = '$name' AND n.timestamp <= '$date' AND n.timestamp >= '". ($date - 2592000) ."' GROUP BY n.nid ORDER BY n.nid DESC LIMIT 20");
+
+ $output .= "<table border=\"0\" cellpadding=\"4\" cellspacing=\"4\">";
+
+ while ($blog = db_fetch_object($result)) {
+
+ $links = array();
+
+ if ($date != date("dny", $blog->timestamp)) {
+ $date = date("dny", $blog->timestamp);
+ $output .= "<tr><td colspan=\"2\"><b><a href=\"module.php?mod=blog&name=". urlencode($name) ."&date=". mktime(23, 59, 59, date("n", $blog->timestamp), date("d", $blog->timestamp), date("Y", $blog->timestamp)) ."\">". format_date($blog->timestamp, custom, "d M Y") .":</a></b></td></tr>";
+ }
+
+ if ($user->id && $user->name == $name) {
+ $links[] = "<a href=\"submit.php?mod=blog&op=edit&id=$blog->nid\">". t("edit") ."</a>";
+ }
+
+ if ($user->id && user_access("post blogs")) {
+ $links[] = "<a href=\"submit.php?mod=blog&type=blog&id=$blog->nid\">". t("blog it") ."</a>";
+ }
+
+ if ($blog->comment) {
+ $links[] = "<a href=\"node.php?id=$blog->nid\">". format_plural($blog->comments, t("comment"), t("comments")) ."</a>";
+ }
+
+ $output .= "<tr><td><div style=\"margin-left: 20px;\"><b>". check_output($blog->title) ."</b></div></td><td align=\"right\">". $theme->links($links) ."</td></tr>";
+ $output .= "<tr><td colspan=\"2\"><div style=\"margin-left: 40px;\">". check_output($blog->body, 1) ."</div><br /></td></tr>";
+
+ }
+
+ $output .= "</table>";
+ $output .= "<a href=\"module.php?mod=blog&op=feed&name=". urlencode($name) ."\"><img src=\"". $theme->image("xml.gif") ."\" width=\"36\" height=\"14\" align=\"right\" border=\"0\" /></a>\n";
+
+ $theme->box(strtr(t("%a's blog"), array("%a" => $name)), $output, "main");
+}
+
+function blog_page_last() {
+ global $theme, $user;
+
+ $result = db_query("SELECT n.author, n.nid, n.title, n.comment, COUNT(c.cid) AS comments, n.timestamp, b.body, u.name FROM blog b LEFT JOIN node n ON b.nid = n.nid LEFT JOIN users u ON n.author = u.id LEFT JOIN comments c ON n.nid = c.lid GROUP BY n.nid ORDER BY n.nid DESC LIMIT 20");
+
+ $output .= "<table border=\"0\" cellpadding=\"4\" cellspacing=\"4\">";
+
+ while ($blog = db_fetch_object($result)) {
+
+ $links = array();
+
+ $links[] = "<a href=\"module.php?mod=blog&op=view&name=". urlencode($blog->name) ."\">". strtr(t("%a's blog"), array("%a" => $blog->name)) ."</a>";
+
+ if ($blog->author == $user->id) {
+ $links[] = "<a href=\"submit.php?mod=blog&op=edit&id=$blog->nid\">". t("edit") ."</a>";
+ }
+
+ if ($user->id && user_access("post blogs")) {
+ $links[] = "<a href=\"submit.php?mod=blog&type=blog&id=$blog->nid\">". t("blog it") ."</a>";
+ }
+
+ if ($blog->comment) {
+ $links[] = "<a href=\"node.php?id=$blog->nid\">". format_plural($blog->comments, t("comment"), t("comments")) ."</a>";
+ }
+
+ $output .= "<tr><td><b>". check_output($blog->title) ."</b></td><td align=\"right\">". $theme->links($links) ."</td></tr>";
+ $output .= "<tr><td colspan=\"2\"><div style=\"margin-left: 20px;\">". check_output($blog->body, 1) ."</div><br /></td></tr>";
+
+ }
+
+ $output .= "</table>";
+ $output .= "<a href=\"module.php?mod=blog&op=feed\"><img src=\"". $theme->image("xml.gif") ."\" width=\"36\" height=\"14\" align=\"right\" border=\"0\" /></a>\n";
+
+ $theme->box(t("User blogs"), $output, "main");
+}
+
+function blog_remove($nid) {
+ global $status, $user;
+
+ $blog = node_get_object(array(nid => $nid, type => "blog"));
+
+ if ($blog && $blog->author == $user->id) {
+ node_save(array(nid => $nid), array(status => $status[dumped]));
+ node_del(array(type => "blog", nid => $nid));
+ }
+}
+
+function blog_view($node, $main = 0) {
+ global $theme;
+
+ $theme->node($node, $main);
+}
+
+function blog_form($edit = array()) {
+ global $REQUEST_URI, $id, $mod, $type, $user, $theme;
+
+ if ($user->id && (user_access("administer blogs") || user_access("post blogs"))) {
+ if ($mod == "node" || $edit[type] == "blog") {
+ // do nothing
+ }
+ else if ($type == "blog") {
+ $item = node_get_object(array(type => "blog", nid => $id));
+ $edit["title"] = $item->title;
+ $edit["body"] = "<i>". $item->body ."</i> [<a href=\"module.php?mod=blog&name=". urlencode($item->name) ."&date=$item->timestamp\">$item->name</a>]";
+ }
+ else if ($type == "import") {
+ $item = db_fetch_object(db_query("SELECT i.*, f.title as ftitle, f.link as flink FROM item i, feed f WHERE i.iid = '". check_input($id) ."' AND i.fid = f.fid"));
+ $edit["title"] = $item->title;
+ $edit["body"] = "<a href=\"$item->link\">$item->title</a> - <i>". check_output($item->description) ."</i> [<a href=\"$item->flink\">$item->ftitle</a>]\n";
+ }
+
+ if ($edit["title"]) {
+ $form .= blog_view(new Blog(node_preview($edit)));
+ }
+
+ $form .= form_textfield(t("Subject"), "title", $edit["title"], 50, 64);
+ $form .= form_textarea(t("Body"), "body", $edit["body"], 70, 15, t("Allowed HTML tags") .": ". htmlspecialchars(variable_get("allowed_html", "")));
+
+ $form .= form_hidden("type", "blog");
+
+ if ($edit["nid"] > 0) {
+ $form .= form_hidden("nid", $edit["nid"]);
+ }
+
+ if (!$edit) {
+ $form .= form_submit(t("Preview"));
+ }
+ else if ($edit && !$edit["title"]) {
+ $form .= "<font color=\"red\">". t("Warning: you did not supply a subject.") ."</font><p>\n";
+ $form .= form_submit(t("Preview"));
+ }
+ else if ($edit && !$edit["body"]) {
+ $form .= "<font color=\"red\">". t("Warning: you did not supply any text.") ."</font><p>\n";
+ $form .= form_submit(t("Preview"));
+ }
+ else {
+ $form .= form_submit(t("Preview"));
+ $form .= form_submit(t("Submit"));
+ }
+
+ return form($REQUEST_URI, $form);
+ }
+ else {
+ return message_access();
+ }
+}
+
+function blog_save($edit) {
+ global $status, $user;
+
+ if ($user->id && (user_access("administer blogs") || user_access("post blogs"))) {
+ if ($edit["nid"]) {
+ node_save($edit, array(title, body, type => "blog"));
+ }
+ else {
+ node_save($edit, array(attributes => node_attributes_save("blog", $edit), author => $user->id, body, comment => variable_get("blog_comment", 0), moderate => variable_get("blog_moderate", ""), promote => variable_get("blog_promote", 0), score => 0, status => variable_get("blog_status", $status[posted]), timestamp => time(), title, type => "blog", votes => 0));
+ }
+ }
+}
+
+function blog_edit_history($nid) {
+ global $user;
+
+ $result = db_query("SELECT n.nid, n.title, n.timestamp, b.body FROM blog b LEFT JOIN node n ON b.nid = n.nid WHERE n.author = '". check_input($user->id) ."' AND n.nid <= '". check_input($nid) ."' ORDER BY b.lid DESC LIMIT 15");
+
+ $output .= "<table cellpadding=\"3\" cellspacing=\"3\" border=\"0\" width=\"100%\">";
+ while ($blog = db_fetch_object($result)) {
+ $output .= "<tr><td><b>". check_output($blog->title) ."</b><br />". check_output($blog->body, 1) ."</td><td><a href=\"submit.php?mod=blog&op=edit&id=$blog->nid\">". t("edit") ."</a></td><td><a href=\"submit.php?mod=blog&op=delete&id=$blog->nid\">". t("delete") ."</a></td></tr>\n";
+ }
+ $output .= "</table>";
+
+ return $output;
+}
+
+function blog_page() {
+ global $theme, $op, $name, $date;
+
+ if (user_access("access blogs")) {
+ switch ($op) {
+ case "feed":
+ if ($name) {
+ blog_feed_user($name, $date);
+ }
+ else {
+ blog_feed_last();
+ }
+ break;
+ default:
+ $theme->header();
+ if ($name) {
+ blog_page_user($name, $date);
+ }
+ else {
+ blog_page_last();
+ }
+ $theme->footer();
+ }
+ }
+ else {
+ $theme->header();
+ $theme->box(t("Access denied"), message_access());
+ $theme->footer();
+ }
+
+}
+
+function blog_user() {
+ global $op, $id, $edit, $theme, $user;
+
+ if (user_access("post blogs")) {
+ switch ($op) {
+ case "delete":
+ blog_remove($id);
+ blog_page_user($user->name, time());
+ break;
+ case "edit":
+ $node = node_get_array(array("nid" => $id, "type" => "blog"));
+ if ($node[author] == $user->id) {
+ $theme->box(t("Submit a blog"), blog_form($node), "main");
+ $theme->box(t("Older blogs"), blog_edit_history($id), "main");
+ }
+ else {
+ $theme->box(t("Submit"), message_access());
+ }
+ break;
+ case t("Preview"):
+ $theme->box(t("Preview Blog"), blog_form($edit), "main");
+ break;
+ case t("Submit"):
+ blog_save($edit);
+ blog_page_user($user->name, time());
+ break;
+ default:
+ $theme->box(t("Submit a blog"), blog_form($edit), "main");
+ }
+ }
+}
+
+
+function blog_link($type, $node = 0) {
+ global $user;
+
+ if ($type == "page" && user_access("access blogs")) {
+ $links[] = "<a href=\"module.php?mod=blog\">". t("user blogs") ."</a>";
+ }
+
+ if ($type == "menu" && user_access("post blogs")) {
+ $links[] = "<a href=\"submit.php?mod=blog\">". t("add blog entry") ."</a>";
+ $links[] = "<a href=\"module.php?mod=blog&op=view&name=". urlencode($user->name) ."\">". t("view your blog") ."</a>";
+ }
+
+ if ($type == "node" && $node->type == "blog") {
+ $links[] = "<a href=\"module.php?mod=blog&op=view&name=". urlencode($node->name) ."\">". strtr(t("%a's blog"), array("%a" => $node->name)) ."</a>";
+ }
+
+ return $links ? $links : array();
+}
+
+
+function blog_block() {
+ global $name, $date, $user, $mod;
+
+ $result = db_query("SELECT u.name, n.timestamp, n.title, n.nid FROM node n LEFT JOIN users u ON n.author = u.id WHERE n.type = 'blog' ORDER BY n.nid DESC LIMIT 10");
+ while ($node = db_fetch_object($result)) {
+ $output .= "<a href=\"module.php?mod=blog&op=view&name=". urlencode($node->name) ."\">". check_output($node->title) ."</a><br />\n";
+ }
+
+ $block[0]["subject"] = "<a href=\"module.php?mod=blog\">". t("User blogs") ."</a>";
+ $block[0]["content"] = $output;
+ $block[0]["info"] = t("User blogs");
+ $block[0]["link"] = "module.php?mod=blog";
+
+ $date = $date ? $date : time();
+ $name = $name ? $name : $user->name;
+
+ if (($mod == "blog") || ($mod == "block")) {
+ // Only show this block on "blog pages" and in the admin block section.
+ $calendar = new BlogCalendar($name, $date);
+ $block[1]["subject"] = "<a href=\"module.php?mod=blog&name=". urlencode($name) ."\">" . t("Browse blog") . "</a>";
+ $block[1]["content"] = $calendar->display();
+ $block[1]["info"] = t("Calendar to browse blogs");
+ }
+
+ return $block;
+}
+
+
+function blog_search($keys) {
+ global $status, $user;
+ $result = db_query("SELECT n.*, b.* FROM blog b LEFT JOIN node n ON n.nid = b.nid AND n.lid = b.lid WHERE (n.title LIKE '%$keys%' OR b.body LIKE '%$keys%') ORDER BY n.timestamp DESC LIMIT 20");
+ while ($blog = db_fetch_object($result)) {
+ $find[$i++] = array("title" => check_output($blog->title), "link" => (user_access("administer nodes") ? "admin.php?mod=node&type=blog&op=edit&id=$blog->nid" : "node.php?id=$blog->nid"), "user" => $blog->name, "date" => $blog->timestamp);
+ }
+ return $find;
+}
+
+class BlogCalendar {
+ var $date;
+ var $name;
+
+ function BlogCalendar($name, $date) {
+ $this->name = urlencode($name);
+
+ // Prevent future dates:
+ $today = mktime(23, 59, 59, date("n", time()), date("d", time()), date("Y", time()));
+ $this->date = (($date && $date <= $today) ? $date : $today);
+ $this->date = mktime(23, 59, 59, date("n", $this->date), date("d", $this->date), date("Y", $this->date));
+ }
+
+ function display() {
+ // Extract information from the given date:
+ $month = date("n", $this->date);
+ $year = date("Y", $this->date);
+ $day = date("d", $this->date);
+
+ // Extract today's date:
+ $today = mktime(23, 59, 59, date("n", time()), date("d", time()), date("Y", time()));
+
+ // Extract the timestamp of the last day of today's month:
+ $thislast = mktime(23, 59, 59, date("n", time()), date("t", time()), date("Y", time()));
+
+ // Extract first day of the month:
+ $first = date("w", mktime(0, 0, 0, $month, 1, $year));
+
+ // Extract last day of the month:
+ $last = date("t", mktime(0, 0, 0, $month, 1, $year));
+
+ // Calculate previous and next months dates and check for shorter months (28/30 days)
+ $prevmonth = mktime(23, 59, 59, $month - 1, 1, $year);
+ $prev = mktime(23, 59, 59, $month - 1, min(date("t", $prevmonth), $day), $year);
+ $nextmonth = mktime(23, 59, 59, $month + 1, 1, $year);
+ $next = mktime(23, 59, 59, $month + 1, min(date("t", $nextmonth), $day), $year);
+
+ // Generate calendar header:
+ $output .= "\n<!-- calendar -->\n";
+ $output .= "<TABLE WIDTH=\"100%\" BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"1\">\n";
+ $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"7\"><B><A HREF=\"module.php?mod=blog&name=". urlencode($this->name) ."&date=$prev\" STYLE=\"text-decoration: none;\">&lt;&lt;</A> &nbsp; ". date("F Y", $this->date) ." &nbsp; " . ($next <= $thislast ? "<A HREF=\"module.php?mod=blog&name=". urlencode($this->name) ."&date=$next\" STYLE=\"text-decoration: none;\">&gt;&gt;</A>" : "&gt;&gt;") . "<B></TD></TR>\n";
+
+ // Generate the days of the week:
+ $output .= " <TR>";
+ $somesunday = mktime(0, 0, 0, 3, 20, 1994);
+ for ($i = 0; $i < 7; $i++) {
+ $output .= "<TD ALIGN=\"center\">" . substr(ucfirst(t(date("l", $somesunday + $i * 86400))), 0, 1) . "</TD>";
+ }
+ $output .= "</TR>\n";
+
+ // Initialize temporary variables:
+ $nday = 1;
+ $sday = $first;
+
+ // Loop through all the days of the month:
+ while ($nday <= $last) {
+ // Set up blank days for first week of the month:
+ if ($first) {
+ $output .= " <TR><TD COLSPAN=\"$first\">&nbsp</TD>\n";
+ $first = 0;
+ }
+
+ // Start every week on a new line:
+ if ($sday == 0) $output .= " <TR>\n";
+
+ // Print one cell:
+ $date = mktime(23, 59, 59, $month, $nday, $year);
+ if ($date == $this->date) $output .= " <TD ALIGN=\"center\" BGCOLOR=\"#CCCCCC\"><B>$nday</B></TD>\n";
+ else if ($date > $today) $output .= " <TD ALIGN=\"center\">$nday</TD>\n";
+ else $output .= " <TD ALIGN=\"center\"><A HREF=\"module.php?mod=blog&name=". urlencode($this->name) ."&date=$date\" STYLE=\"text-decoration: none;\">$nday</A></TD>\n";
+
+ // Start every week on a new line:
+ if ($sday == 6) $output .= " </TR>\n";
+
+ // Update temporary variables:
+ $sday++;
+ $sday = $sday % 7;
+ $nday++;
+ }
+
+ // Complete the calendar:
+ if ($sday) {
+ $end = 7 - $sday;
+ $output .= " <TD COLSPAN=\"$end\">&nbsp;</TD>\n </TR>\n";
+ }
+ $output .= "</TABLE>\n\n";
+
+ // Return calendar:
+ return $output;
+ }
+}
+
+?>