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

Dries's avatar
   
Dries committed
4
5
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
6
 $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 post."));
Dries's avatar
   
Dries committed
7
8
9
10
11

 return $output;

}

Dries's avatar
   
Dries committed
12

Dries's avatar
   
Dries committed
13
14
15
function blog_node($field) {
  global $user;

Dries's avatar
   
Dries committed
16
  $info["name"] = t("personal blog");
17
  $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
18
19
20
21
22
23
24
25

  return $info[$field];
}

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

  if ($op == "view") {
Dries's avatar
   
Dries committed
26
    return $node->status;
Dries's avatar
   
Dries committed
27
28
29
30
31
32
33
  }

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

  if ($op == "update") {
Dries's avatar
   
Dries committed
34
    return ($user->uid == $node->uid);
Dries's avatar
   
Dries committed
35
36
37
  }

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

}

Dries's avatar
   
Dries committed
43
function blog_save($op, $node) {
Dries's avatar
   
Dries committed
44
  global $REQUEST_URI;
Dries's avatar
   
Dries committed
45
46
47
48
49
50

  if ($op == "approve") {
    return array("promote" => 1);
  }

  if ($op == "create") {
Dries's avatar
   
Dries committed
51
    return array("body" => filter($node->body), "promote" => 0, "moderate" => 1, "status" => 1);
Dries's avatar
   
Dries committed
52
53
54
55
56
57
58
  }

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

  if ($op == "update") {
Dries's avatar
   
Dries committed
59
    if (strstr($REQUEST_URI, "module.php?mod=node&op=edit")) {
Dries's avatar
   
Dries committed
60
61
62
      /*
      ** 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
63
64
65
66
67
68
      ** If a node administrator updates his own blog entry through
      ** the blog update mechanism that regular users use, then he
      ** will be treated as a regular user and his blog entry will
      ** be demoted.  We use the $REQUEST_URI field to dectect this
      ** as we don't want to interfer with the updating of blog
      ** entries through the admin pages.
Dries's avatar
   
Dries committed
69
70
      */

Dries's avatar
   
Dries committed
71
      return array("body" => filter($node->body), "promote" => 0, "moderate" => 1, "score" => 0, "votes" => 0, "users" => 0);
Dries's avatar
   
Dries committed
72
    }
Dries's avatar
   
Dries committed
73
    else if (user_access("adminster nodes")) {
Dries's avatar
   
Dries committed
74
      /*
Dries's avatar
   
Dries committed
75
76
      ** When an administrator updates blog entries through the admin
      ** pages, they will not be changed unless explicitly specified.
Dries's avatar
   
Dries committed
77
78
79
80
      */

      return array();
    }
Dries's avatar
   
Dries committed
81
82
83
84
  }

}

Dries's avatar
   
Dries committed
85
86
87
88
89
90
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
91
function blog_feed_user($uid = 0, $date = 0) {
Dries's avatar
   
Dries committed
92
93
  global $user;

Dries's avatar
   
Dries committed
94
95
96
97
98
99
100
101
102
103
  if ($uid) {
    $account = user_load(array("uid" => $uid, "status" => 1));
  }
  else {
    $account = $user;
  }

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

Dries's avatar
   
Dries committed
105
  $result = db_query("SELECT n.nid, n.title, n.body, n.created, u.name, u.uid FROM blog b LEFT JOIN node n ON b.nid = n.nid LEFT JOIN users u ON n.uid = u.uid WHERE u.uid = '$uid' AND n.created > '". ($date - 2592000) ."' ORDER BY b.nid DESC LIMIT 15");
Dries's avatar
   
Dries committed
106
107
108
109
  while ($blog = db_fetch_object($result)) {
    $items .= format_rss_item($blog->title, path_uri() ."node.php?id=$blog->nid", $blog->body);
  }

Dries's avatar
   
Dries committed
110
  $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
Dries's avatar
   
Dries committed
111
  // $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
112
  $output .= "<rss version=\"0.91\">\n";
Dries's avatar
   
Dries committed
113
  $output .= format_rss_channel("$account->name's blog", path_uri() ."module.php?mod=blog&op=view&id=$account->uid", "$account->name's blog", $items);
Dries's avatar
   
Dries committed
114
115
  $output .= "</rss>\n";

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

Dries's avatar
   
Dries committed
118
119
120
121
122
  print $output;

}

function blog_feed_last() {
Dries's avatar
   
Dries committed
123
  $result = db_query("SELECT n.nid, n.title, n.body, n.created, u.name, u.uid FROM blog b LEFT JOIN node n ON b.nid = n.nid LEFT JOIN users u ON n.uid = u.uid ORDER BY b.nid DESC LIMIT 15");
Dries's avatar
   
Dries committed
124
  while ($blog = db_fetch_object($result)) {
Dries's avatar
   
Dries committed
125
    $items .= format_rss_item($blog->title, path_uri() ."module.php?mod=blog&op=view&id=$blog->nid", $blog->body);
Dries's avatar
   
Dries committed
126
127
128
129
130
131
132
  }

  $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";

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

Dries's avatar
   
Dries committed
135
136
137
138
  print $output;

}

Dries's avatar
   
Dries committed
139
function blog_page_user($uid = 0, $date = 0) {
Dries's avatar
   
Dries committed
140
141
  global $theme, $user;

Dries's avatar
   
Dries committed
142
143
144
145
146
147
  if ($uid) {
    $account = user_load(array("uid" => $uid, "status" => 1));
  }
  else {
    $account = $user;
  }
Dries's avatar
   
Dries committed
148

Dries's avatar
   
Dries committed
149
150
151
152
  if (!$date) {
    $date = time();
  }

Dries's avatar
   
Dries committed
153
  $result = db_query("SELECT nid FROM node WHERE type = 'blog' AND uid = '$account->uid' AND created <= '$date' ORDER BY nid DESC");
Dries's avatar
   
Dries committed
154

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

Dries's avatar
   
Dries committed
157
158
159
  while ($node = db_fetch_object($result)) {

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

Dries's avatar
   
Dries committed
161
162
    $links = array();

Dries's avatar
   
Dries committed
163
164
165
    if ($date != date("dny", $blog->created)) {
      $date = date("dny", $blog->created);
      $output .= "<tr><td colspan=\"2\"><b><a href=\"module.php?mod=blog&id=$blog->uid&date=". mktime(23, 59, 59, date("n", $blog->created), date("d", $blog->created), date("Y", $blog->created)) ."\">". format_date($blog->created, custom, "d M Y") .":</a></b></td></tr>";
Dries's avatar
   
Dries committed
166
167
    }

Dries's avatar
   
Dries committed
168
    if ($user->uid && $user->uid == $uid) {
Dries's avatar
   
Dries committed
169
      $links[] = "<a href=\"module.php?mod=node&op=edit&id=$blog->nid\">". t("edit") ."</a>";
Dries's avatar
   
Dries committed
170
171
    }

Dries's avatar
   
Dries committed
172
    if ($user->uid) {
Dries's avatar
   
Dries committed
173
      $links[] = "<a href=\"module.php?mod=node&op=add&type=blog&nid=$blog->nid\">". t("blog it") ."</a>";
Dries's avatar
   
Dries committed
174
175
176
    }

    if ($blog->comment) {
Dries's avatar
   
Dries committed
177
      $links[] = "<a href=\"node.php?id=$blog->nid\">". format_plural(node_get_comments($blog->nid), t("comment"), t("comments")) ."</a>";
Dries's avatar
   
Dries committed
178
179
180
181
182
    }

    $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>";

Dries's avatar
   
Dries committed
183
  }
Dries's avatar
   
Dries committed
184

Dries's avatar
   
Dries committed
185
  $output .= "</table>";
Dries's avatar
   
Dries committed
186
  $output .= "<a href=\"module.php?mod=blog&op=feed&id=$account->uid\"><img src=\"". $theme->image("xml.gif") ."\" width=\"36\" height=\"14\" align=\"right\" border=\"0\" /></a>\n";
Dries's avatar
   
Dries committed
187

Dries's avatar
   
Dries committed
188
  $theme->box(sprintf(t("%s's blog"), $account->name), $output, "main");
Dries's avatar
   
Dries committed
189
190
}

Dries's avatar
Dries committed
191
function blog_page_last() {
Dries's avatar
   
Dries committed
192
  global $theme, $user;
Dries's avatar
   
Dries committed
193

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

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

Dries's avatar
   
Dries committed
198
199
  while ($node = db_fetch_object($result)) {
    $blog = node_load(array("nid" => $node->nid));
Dries's avatar
   
Dries committed
200

Dries's avatar
   
Dries committed
201
202
    $links = array();

Dries's avatar
   
Dries committed
203
    $links[] = "<a href=\"module.php?mod=blog&op=view&id=$blog->uid\">". sprintf("%s's blog", $blog->name) ."</a>";
Dries's avatar
   
Dries committed
204

Dries's avatar
   
Dries committed
205
    if ($blog->uid == $user->uid) {
Dries's avatar
   
Dries committed
206
      $links[] = "<a href=\"module.php?mod=node&op=edit&id=$blog->nid\">". t("edit") ."</a>";
Dries's avatar
   
Dries committed
207
208
    }

Dries's avatar
   
Dries committed
209
    if ($user->uid) {
Dries's avatar
   
Dries committed
210
      $links[] = "<a href=\"module.php?mod=node&op=add&type=blog&nid=$blog->nid\">". t("blog it") ."</a>";
Dries's avatar
   
Dries committed
211
212
213
    }

    if ($blog->comment) {
Dries's avatar
   
Dries committed
214
      $links[] = "<a href=\"node.php?id=$blog->nid\">". format_plural(node_get_comments($blog->nid), t("comment"), t("comments")) ."</a>";
Dries's avatar
   
Dries committed
215
    }
Dries's avatar
   
Dries committed
216

Dries's avatar
   
Dries committed
217
    $output .= "<tr><td><b>". check_output($blog->title) ."</b></td><td align=\"right\">". $theme->links($links) ."</td></tr>";
Dries's avatar
Dries committed
218
    $output .= "<tr><td colspan=\"2\"><div style=\"margin-left: 20px;\">". check_output($blog->body, 1) ."</div><br /></td></tr>";
Dries's avatar
   
Dries committed
219

Dries's avatar
   
Dries committed
220
  }
Dries's avatar
   
Dries committed
221

Dries's avatar
   
Dries committed
222
  $output .= "</table>";
Dries's avatar
   
Dries committed
223
  $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";
Dries's avatar
   
Dries committed
224

Dries's avatar
   
Dries committed
225
  $theme->box(t("User blogs"), $output, "main");
Dries's avatar
   
Dries committed
226
227
}

228
function blog_form(&$node, &$help, &$error) {
Dries's avatar
   
Dries committed
229
230
  global $nid, $iid;

Dries's avatar
   
Dries committed
231
232
233
234
235
236
237
  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
238
239
240
241
      $error["body"] = "<div style=\"color: red;\">". t("The body of your blog is too short.") ."</div>";
    }
  }
  else {
Dries's avatar
   
Dries committed
242
243
244
245
246
247
248
249
250
251
252
253

    /*
    ** 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
254
    if ($nid && $blog = node_load(array("nid" => $nid))) {
Dries's avatar
   
Dries committed
255
      $node->body = "<i>". $blog->body ."</i> [<a href=\"module.php?mod=blog&id=$blog->uid&date=$blog->created\">$blog->name</a>]";
Dries's avatar
   
Dries committed
256
257
258
    }

    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 = '". check_input($iid) ."' AND i.fid = f.fid"))) {
Dries's avatar
   
Dries committed
259
      $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
260
261
    }
  }
Dries's avatar
   
Dries committed
262

Dries's avatar
   
Dries committed
263
264
265
266
  if ($node->teaser) {
    $output .= form_textarea(t("Teaser"), "teaser", $node->teaser, 60, 5, $error["teaser"]);
  }

Dries's avatar
   
Dries committed
267
  $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
268

Dries's avatar
   
Dries committed
269
  return $output;
Dries's avatar
   
Dries committed
270
271
272
273
}


function blog_page() {
Dries's avatar
   
Dries committed
274
  global $theme, $id, $op, $date;
Dries's avatar
Dries committed
275

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

Dries's avatar
   
Dries committed
303
304
}

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

Dries's avatar
   
Dries committed
308
  if ($type == "page" && user_access("access content")) {
Dries's avatar
   
Dries committed
309
    $links[] = "<a href=\"module.php?mod=blog\">". t("user blogs") ."</a>";
Dries's avatar
   
Dries committed
310
311
  }

Dries's avatar
   
Dries committed
312
  if ($type == "menu") {
Dries's avatar
   
Dries committed
313
    $links[] = "<a href=\"module.php?mod=node&op=add&type=blog\">". t("add blog entry") ."</a>";
Dries's avatar
   
Dries committed
314
    $links[] = "<a href=\"module.php?mod=blog&op=view&id=$user->uid\">". t("view your blog") ."</a>";
Dries's avatar
   
Dries committed
315
316
  }

Dries's avatar
   
Dries committed
317
  if ($type == "node" && $node->type == "blog") {
Dries's avatar
   
Dries committed
318
319
320
321
322
323
    if (blog_access("update", $node)) {
      $links[] = "<a href=\"module.php?mod=node&op=edit&id=$node->nid\">". t("update this blog") ."</a>";
    }
    else {
      $links[] = "<a href=\"module.php?mod=blog&op=view&id=$node->uid\">". strtr(t("%a's blog"), array("%a" => $node->name)) ."</a>";
    }
Dries's avatar
   
Dries committed
324
325
  }

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


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

Dries's avatar
   
Dries committed
333
  $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
334
335

  while ($node = db_fetch_object($result)) {
Dries's avatar
   
Dries committed
336
    $output .= "<a href=\"node.php?id=$node->nid\">". check_output($node->title) ."</a><br />\n";
Dries's avatar
   
Dries committed
337
338
  }

Dries's avatar
   
Dries committed
339
340
341
  $output .= "<br /><div align=\"right\"><a href=\"module.php?mod=blog\">". t("more") ."</a></div>";

  $block[0]["subject"] = t("User blogs");
Dries's avatar
   
Dries committed
342
  $block[0]["content"] = $output;
Dries's avatar
   
Dries committed
343
  $block[0]["info"] = t("User blogs");
Dries's avatar
   
Dries committed
344
345
346
347
348
349
  $block[0]["link"] = "module.php?mod=blog";

  return $block;
}

?>