blog.module 13.2 KB
Newer Older
Dries's avatar
 
Dries committed
1
<?php
2
// $Id$
Dries's avatar
 
Dries committed
3

4 5 6 7 8 9
function blog_system($field){
  $system["description"] = t("Enables keeping an online journal.");
  return $system[$field];
}


Dries's avatar
 
Dries committed
10 11
function blog_conf_options() {
 $output .= form_textarea("Explanation or submission guidelines", "blog_help", variable_get("blog_help", ""), 55, 4, "This text will be displayed at the top of the blog submission form.  Useful for helping or instructing your users.");
Dries's avatar
 
Dries committed
12
 $output .= form_select(t("Minimum number of words in a node"), "minimum_blog_size", variable_get("minimum_blog_size", 0), array(0 => "0 words", 10 => "10 words", 25 => "25 words",  50 => "50 words", 75 => "75 words", 100 => "100 words", 125 => "125 words",  150 => "150 words", 175 => "175 words", 200 => "200 words"), t("The minimum number of words a personal blog entry should consist of.  This can be useful to rule out submissions that do not meet the site's standards, such as short test posts."));
Dries's avatar
 
Dries committed
13 14 15 16 17

 return $output;

}

Dries's avatar
 
Dries committed
18 19 20
function blog_node($field) {
  global $user;

Dries's avatar
 
Dries committed
21
  $info["name"] = t("personal blog entry");
22
  $info["description"] = t("A blog is your personal diary or journal.  It is made up of individual entries that are time stamped and are typically arranged by the day, as normal a diary. Blogs often contain links to things you've seen, or on which you agree/disagree.  Since a Blog is personal, you and only you have full control on what you publish.  The most interesting blogs, or those blogs that fit the site's topic might get promoted to the front page.");
Dries's avatar
 
Dries committed
23 24 25 26 27 28 29 30

  return $info[$field];
}

function blog_access($op, $node) {
  global $user;

  if ($op == "view") {
Dries's avatar
 
Dries committed
31
    return $node->status;
Dries's avatar
 
Dries committed
32 33 34 35 36 37 38
  }

  if ($op == "create") {
    return $user->uid;
  }

  if ($op == "update") {
Dries's avatar
 
Dries committed
39
    return ($user->uid == $node->uid);
Dries's avatar
 
Dries committed
40 41 42
  }

  if ($op == "delete") {
Dries's avatar
 
Dries committed
43
    return ($user->uid == $node->uid);
Dries's avatar
 
Dries committed
44 45 46 47
  }

}

48 49 50 51
function blog_user($type, &$edit, &$user) {
  switch ($type) {
    case "view_public":
    case "view_private":
Dries's avatar
 
Dries committed
52
      return form_item(t("Blog"), lm(t("view recent entries"), array("mod" => "blog", "id" => $user->uid), "", array("title" => t("View recent blog entries."))) ."<br />". lm(t("view all entries"), array("mod" => "blog", "id" => $user->uid, "all" => 1), "", array("title" => t("View all blog entries."))));
53 54 55
  }
}

Dries's avatar
 
Dries committed
56 57 58 59 60 61
function blog_save($op, $node) {
  if ($op == "approve") {
    return array("promote" => 1);
  }

  if ($op == "create") {
Dries's avatar
 
Dries committed
62
    if (user_access("administer nodes")) {
63
      return array("body" => filter($node->body), "teaser" => filter($node->teaser));
Dries's avatar
 
Dries committed
64 65 66 67
    }
    else {
      return array("body" => filter($node->body), "promote" => 0, "moderate" => 1, "status" => 1, "teaser" => filter($node->teaser));
    }
Dries's avatar
 
Dries committed
68 69 70 71 72 73 74
  }

  if ($op == "decline") {
    return array("promote" => 0);
  }

  if ($op == "update") {
Dries's avatar
 
Dries committed
75
    if (user_access("administer nodes")) {
Dries's avatar
 
Dries committed
76
      /*
Dries's avatar
 
Dries committed
77 78
      ** When an administrator updates blog entries through the admin
      ** pages, they will not be changed unless explicitly specified.
Dries's avatar
 
Dries committed
79 80
      */

81
      return array("body" => filter($node->body), "teaser" => filter($node->teaser));
Dries's avatar
 
Dries committed
82
    }
Dries's avatar
 
Dries committed
83
    else {
Dries's avatar
 
Dries committed
84
      /*
Dries's avatar
 
Dries committed
85 86
      ** Updating your own blog entry will demote it (if promoted),
      ** and will queue it in the moderation queue for promotion.
Dries's avatar
 
Dries committed
87 88
      */

Dries's avatar
 
Dries committed
89
      return array("body" => filter($node->body), "promote" => 0, "moderate" => 1, "score" => 0, "teaser" => filter($node->teaser), "votes" => 0, "users" => 0);
Dries's avatar
 
Dries committed
90
    }
Dries's avatar
 
Dries committed
91 92 93 94
  }

}

Dries's avatar
 
Dries committed
95 96 97 98 99 100
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
}

Dries's avatar
 
Dries committed
101
function blog_feed_user($uid = 0, $date = 0) {
Dries's avatar
 
Dries committed
102 103
  global $user;

Dries's avatar
 
Dries committed
104 105 106 107 108 109 110 111 112 113
  if ($uid) {
    $account = user_load(array("uid" => $uid, "status" => 1));
  }
  else {
    $account = $user;
  }

  if (!$date) {
    $date = time();
  }
Dries's avatar
 
Dries committed
114

Dries's avatar
 
Dries committed
115
  $result = db_query("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM node n LEFT JOIN users u ON n.uid = u.uid WHERE n.type = 'blog' AND u.uid = '$uid' AND n.created > '". ($date - 2592000) ."' ORDER BY n.nid DESC LIMIT 15");
Dries's avatar
 
Dries committed
116
  while ($blog = db_fetch_object($result)) {
Dries's avatar
 
Dries committed
117
    $items .= format_rss_item($blog->title, path_uri() . drupal_url(array("id" => $blog->nid)), $blog->teaser);
Dries's avatar
 
Dries committed
118 119
  }

Dries's avatar
 
Dries committed
120
  $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
Dries's avatar
 
Dries committed
121
  // $output .= "<!DOCTYPE rss [<!ENTITY % HTMLlat1 PUBLIC \"-//W3C//ENTITIES Latin 1 for XHTML//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent\">\n";
Dries's avatar
 
Dries committed
122
  $output .= "<rss version=\"0.91\">\n";
Dries's avatar
 
Dries committed
123
  $output .= format_rss_channel("$account->name's blog", path_uri() . drupal_url(array("mod" => "blog", "op" => "view", "id" => $account->uid), "module"), "$account->name's blog", $items);
Dries's avatar
 
Dries committed
124 125
  $output .= "</rss>\n";

Dries's avatar
 
Dries committed
126 127
  header("Content-Type: text/xml");

Dries's avatar
 
Dries committed
128 129 130 131 132
  print $output;

}

function blog_feed_last() {
Dries's avatar
 
Dries committed
133 134
  $result = db_query("SELECT n.nid, n.title, n.teaser, n.created, u.name, u.uid FROM node n LEFT JOIN users u ON n.uid = u.uid WHERE n.type = 'blog' ORDER BY n.nid DESC LIMIT 15");

Dries's avatar
 
Dries committed
135
  while ($blog = db_fetch_object($result)) {
Dries's avatar
 
Dries committed
136
    $items .= format_rss_item($blog->title, path_uri() . drupal_url(array("id" => $blog->nid)), $blog->teaser);
Dries's avatar
 
Dries committed
137 138 139 140
  }

  $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
  $output .= "<rss version=\"0.91\">\n";
Dries's avatar
 
Dries committed
141
  $output .= format_rss_channel(variable_get("site_name", "drupal") .": user blogs", path_uri() . drupal_url(array("mod" => "blog"), "module"), "Recently updated blogs.", $items);
Dries's avatar
 
Dries committed
142 143
  $output .= "</rss>\n";

Dries's avatar
 
Dries committed
144 145
  header("Content-Type: text/xml");

Dries's avatar
 
Dries committed
146 147 148 149
  print $output;

}

Dries's avatar
 
Dries committed
150
function blog_page_user($uid = 0, $date = 0, $all = 0) {
Dries's avatar
 
Dries committed
151 152
  global $theme, $user;

Dries's avatar
 
Dries committed
153 154 155 156 157 158
  if ($uid) {
    $account = user_load(array("uid" => $uid, "status" => 1));
  }
  else {
    $account = $user;
  }
Dries's avatar
 
Dries committed
159

Dries's avatar
 
Dries committed
160 161 162 163
  if (!$date) {
    $date = time();
  }

Dries's avatar
 
Dries committed
164
  $result = db_query("SELECT nid FROM node WHERE type = 'blog' AND uid = '$account->uid' AND created <= '$date' ORDER BY nid DESC". ($all ? "" : " LIMIT 20"));
Dries's avatar
 
Dries committed
165

Dries's avatar
 
Dries committed
166
  $output .= "<table border=\"0\" cellpadding=\"4\" cellspacing=\"4\">";
Dries's avatar
 
Dries committed
167

Dries's avatar
 
Dries committed
168 169 170
  while ($node = db_fetch_object($result)) {

    $blog = node_load(array("nid" => $node->nid));
Dries's avatar
 
Dries committed
171

Dries's avatar
 
Dries committed
172 173
    if ($date != date("dny", $blog->created)) {
      $date = date("dny", $blog->created);
Kjartan's avatar
Kjartan committed
174
      $output .= "<tr><td colspan=\"3\"><b>". lm(format_date($blog->created, "small", "d M Y"), array("mod" => "blog", "id" => $blog->uid, "date" => mktime(23, 59, 59, date("n", $blog->created), date("d", $blog->created), date("Y", $blog->created))), "", array("title" => t("Permanent link to this date."))) ."</b></td></tr>";
Dries's avatar
 
Dries committed
175 176
    }

Dries's avatar
 
Dries committed
177
    $links = link_node($blog, 1);
Dries's avatar
 
Dries committed
178

Dries's avatar
 
Dries committed
179
    $output .= "<tr><td><div style=\"margin-left: 20px;\"><b>". check_output($blog->title) ."</b></div></td><td align=\"right\">". $theme->links($links) ."</td><td>". l('<img src="misc/blog.gif" width="12" height="16" border="0" align="top">', array("id" => $node->nid), "node", "", array("title" => t("Permanent link to this blog entry."))) ."</td></tr>";
Kjartan's avatar
Kjartan committed
180
    $output .= "<tr><td colspan=\"3\"><div style=\"margin-left: 40px;\">". check_output($blog->teaser, 1) ."</div><br /></td></tr>";
Dries's avatar
 
Dries committed
181

Dries's avatar
 
Dries committed
182
  }
Dries's avatar
 
Dries committed
183

Dries's avatar
 
Dries committed
184
  $output .= "</table>";
Kjartan's avatar
Kjartan committed
185
  $output .= lm("<img src=\"". $theme->image("xml.gif") ."\" width=\"36\" height=\"14\" align=\"right\" border=\"0\" />", array("mod" => "blog", "op" => "feed", "id" => $account->uid), "", array("title" => t("Read the XML version of this page."))) ."\n";
186
  if (!$all && $date) {
Dries's avatar
 
Dries committed
187
    $output .= lm(t("show all blogs"), array("mod" => "blog", "op" => "view", "id" => $account->uid, "all" => 1), "", array("title" => t("Show all blogs by this user.")));
Dries's avatar
 
Dries committed
188 189
  }
  else {
Dries's avatar
 
Dries committed
190
    $output .= lm(t("show recent blogs"), array("mod" => "blog", "op" => "view", "id" => $account->uid), "", array("title" => t("Show recent blogs by this user.")));
Dries's avatar
 
Dries committed
191
  }
Dries's avatar
 
Dries committed
192

Dries's avatar
 
Dries committed
193
  $theme->box(t("%u's blog", array("%u" => $account->name)), $output);
Dries's avatar
 
Dries committed
194 195
}

Dries's avatar
Dries committed
196
function blog_page_last() {
Dries's avatar
 
Dries committed
197
  global $theme, $user;
Dries's avatar
 
Dries committed
198

Dries's avatar
 
Dries committed
199
  $result = db_query("SELECT nid FROM node WHERE type = 'blog' ORDER BY nid DESC LIMIT 20");
Dries's avatar
 
Dries committed
200

Dries's avatar
 
Dries committed
201
  $output .= "<table border=\"0\" cellpadding=\"4\" cellspacing=\"4\">";
Dries's avatar
 
Dries committed
202

Dries's avatar
 
Dries committed
203 204
  while ($node = db_fetch_object($result)) {
    $blog = node_load(array("nid" => $node->nid));
Dries's avatar
 
Dries committed
205

Dries's avatar
 
Dries committed
206
    $links = link_node($blog, 1);
Dries's avatar
 
Dries committed
207

208 209
    $output .= "<tr><td><b>". check_output($blog->title) ."</b></td><td align=\"right\">". $theme->links($links) ."</td><td>". l('<img src="misc/blog.gif" width="12" height="16" border="0" align="top">', array("id" => $node->nid), "node", "", array("title" => t("Permanent link to this blog entry"))) ."</td></tr>";
    $output .= "<tr><td colspan=\"3\"><div style=\"margin-left: 20px;\">". check_output($blog->teaser, 1) ."</div><br /></td></tr>";
Dries's avatar
 
Dries committed
210
  }
Dries's avatar
 
Dries committed
211

Dries's avatar
 
Dries committed
212
  $output .= "</table>";
Kjartan's avatar
Kjartan committed
213
  $output .= lm("<img src=\"". $theme->image("xml.gif") ."\" width=\"36\" height=\"14\" align=\"right\" border=\"0\" />", array("mod" => "blog", "op" => "feed"), "", array("title" => t("Read the XML version of this page."))) ."\n";
Dries's avatar
 
Dries committed
214

Dries's avatar
 
Dries committed
215
  $theme->box(t("User blogs"), $output, "main");
Dries's avatar
 
Dries committed
216 217
}

218
function blog_form(&$node, &$help, &$error) {
Dries's avatar
 
Dries committed
219 220
  global $nid, $iid;

Dries's avatar
 
Dries committed
221 222 223 224 225 226 227
  if (isset($node->body)) {

    /*
    ** Validate the size of the blog:
    */

    if (count(explode(" ", $node->body)) < variable_get("minimum_blog_size", 0)) {
Dries's avatar
 
Dries committed
228 229 230 231
      $error["body"] = "<div style=\"color: red;\">". t("The body of your blog is too short.") ."</div>";
    }
  }
  else {
Dries's avatar
 
Dries committed
232 233 234 235 236 237 238 239 240 241 242 243

    /*
    ** Carry out some explanation or submission guidelines:
    */

    $help = variable_get("blog_help", "");

    /*
    ** If the user clicked a "blog it" link, we load the data from the
    ** database and quote it in the blog:
    */

Dries's avatar
 
Dries committed
244
    if ($nid && $blog = node_load(array("nid" => $nid))) {
Dries's avatar
 
Dries committed
245
      $node->body = "<i>". $blog->body ."</i> [".lm($blog->name, array("mod" => "blog", "id" => $blog->uid, "date" => $blog->created))."]";
Dries's avatar
 
Dries committed
246 247
    }

Dries's avatar
 
Dries committed
248
    if ($iid && $item = db_fetch_object(db_query("SELECT i.*, f.title as ftitle, f.link as flink FROM item i, feed f WHERE i.iid = '%s' AND i.fid = f.fid", $iid))) {
Dries's avatar
 
Dries committed
249
      $node->body = "<a href=\"$item->link\">$item->title</a> - <i>". check_output($item->description) ."</i> [<a href=\"$item->flink\">$item->ftitle</a>]\n";
Dries's avatar
 
Dries committed
250 251
    }
  }
Dries's avatar
 
Dries committed
252

Dries's avatar
 
Dries committed
253 254 255 256
  if ($node->teaser) {
    $output .= form_textarea(t("Teaser"), "teaser", $node->teaser, 60, 5, $error["teaser"]);
  }

257
  if (function_exists("taxonomy_node_form")) {
Kjartan's avatar
Kjartan committed
258
    $output .= implode("", taxonomy_node_form("blog", $node));
259
  }
Dries's avatar
 
Dries committed
260

Dries's avatar
 
Dries committed
261
  $output .= form_textarea(t("Body"), "body", $node->body, 60, 15, $error["body"] ? $error["body"] : t("Allowed HTML tags") .": ". htmlspecialchars(variable_get("allowed_html", "")));
Dries's avatar
 
Dries committed
262

Dries's avatar
 
Dries committed
263
  return $output;
Dries's avatar
 
Dries committed
264 265 266 267
}


function blog_page() {
268
  global $theme, $id, $op, $date, $all, $name;
Dries's avatar
Dries committed
269

Dries's avatar
 
Dries committed
270
  if (user_access("access content")) {
Dries's avatar
 
Dries committed
271 272
    switch ($op) {
      case "feed":
Dries's avatar
 
Dries committed
273 274
        if ($id) {
          blog_feed_user($id, $date);
Dries's avatar
 
Dries committed
275 276 277 278 279 280
        }
        else {
          blog_feed_last();
        }
        break;
      default:
Dries's avatar
Dries committed
281
        $theme->header();
282 283 284 285
        if ($name) {
          $user = user_load(array("name" => $name));
          $id = $user->uid;
        }
Dries's avatar
 
Dries committed
286
        if ($id) {
Dries's avatar
 
Dries committed
287
          blog_page_user($id, $date, $all);
Dries's avatar
 
Dries committed
288 289 290 291
        }
        else {
          blog_page_last();
        }
Dries's avatar
Dries committed
292
        $theme->footer();
Dries's avatar
 
Dries committed
293 294
    }
  }
Dries's avatar
 
Dries committed
295
  else {
Dries's avatar
Dries committed
296
    $theme->header();
Dries's avatar
Dries committed
297
    $theme->box(t("Access denied"), message_access());
Dries's avatar
Dries committed
298
    $theme->footer();
Dries's avatar
 
Dries committed
299
  }
Dries's avatar
Dries committed
300

Dries's avatar
 
Dries committed
301 302
}

Dries's avatar
 
Dries committed
303
function blog_link($type, $node = 0, $main) {
Dries's avatar
 
Dries committed
304 305
  global $user;

Dries's avatar
 
Dries committed
306
  if ($type == "page" && user_access("access content")) {
Kjartan's avatar
Kjartan committed
307
    $links[] = lm(t("user blogs"), array("mod" => "blog"), "", array("title" => t("Read the latest blog entries.")));
Dries's avatar
 
Dries committed
308 309
  }

Dries's avatar
 
Dries committed
310
  if ($type == "menu.create" && user_access("post content")) {
Kjartan's avatar
Kjartan committed
311
    $links[] = lm(t("create blog entry"), array("mod" => "node", "op" => "add", "type" => "blog"), "", array("title" => t("Add a new personal blog entry.")));
Dries's avatar
 
Dries committed
312 313 314
  }

  if ($type == "menu.view" && user_access("access content")) {
Kjartan's avatar
Kjartan committed
315
    $links[] = lm(t("view personal blog"), array("mod" => "blog", "op" => "view", "id" => $user->uid), "", array("title" => t("Read your latest blog entries.")));
Dries's avatar
 
Dries committed
316 317
  }

Dries's avatar
 
Dries committed
318
  if ($type == "node" && $node->type == "blog") {
319
    global $mod, $op, $id;
Dries's avatar
 
Dries committed
320
    if (blog_access("update", $node)) {
Kjartan's avatar
Kjartan committed
321
      $links[] = lm(t("edit this blog"), array("mod" => "node", "op" => "edit", "id" => $node->nid), "", array("title" => t("Edit this blog entry.")));
Dries's avatar
 
Dries committed
322
    }
323
    elseif ($op != "view" && !$id) {
Kjartan's avatar
Kjartan committed
324
      $links[] = lm(t("%u's blog", array("%u" => $node->name)), array("mod" => "blog", "op" => "view", "id" => $node->uid), "", array("title" => t("Read %u's latest blog entries.", array("%u" => $node->name))));
Dries's avatar
 
Dries committed
325
    }
Dries's avatar
 
Dries committed
326 327
  }

Dries's avatar
 
Dries committed
328 329 330 331
  return $links ? $links : array();
}

function blog_block() {
Dries's avatar
 
Dries committed
332 333
  global $user;

Dries's avatar
 
Dries committed
334
  $result = db_query("SELECT u.uid, u.name, n.created, n.title, n.nid FROM node n LEFT JOIN users u ON n.uid = u.uid WHERE n.type = 'blog' ORDER BY n.nid DESC LIMIT 10");
Dries's avatar
 
Dries committed
335

336 337 338 339 340 341
  if (user_access("access content")) {
    while ($node = db_fetch_object($result)) {
      $output .= l(check_output($node->title), array("id" => $node->nid)) ."<br />\n";
    }
    $output .= "<br /><div align=\"right\">".lm(t("more"), array("mod" => "blog"), t("Read the latest blog entries."))."</div>";
    $block[0]["content"] = $output;
Dries's avatar
 
Dries committed
342 343
  }

Dries's avatar
 
Dries committed
344 345

  $block[0]["subject"] = t("User blogs");
Dries's avatar
 
Dries committed
346
  $block[0]["info"] = t("User blogs");
Dries's avatar
 
Dries committed
347
  $block[0]["link"] = drupal_url(array("mod" => "blog"), "module");
Dries's avatar
 
Dries committed
348 349 350 351 352

  return $block;
}

?>