blog.module 11.7 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
13
14
function blog_node($field) {
  global $user;

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

  return $info[$field];
}

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

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

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

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

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

}

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

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

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

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

  if ($op == "update") {
Dries's avatar
   
Dries committed
58
    if (strstr($REQUEST_URI, "module.php?mod=node&op=edit")) {
Dries's avatar
   
Dries committed
59
60
61
      /*
      ** 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
62
63
64
65
66
67
      ** 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
68
69
70
71
      */

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

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

}

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

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

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

Dries's avatar
   
Dries committed
104
  $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
105
106
107
108
  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
109
  $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
Dries's avatar
   
Dries committed
110
  // $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
111
  $output .= "<rss version=\"0.91\">\n";
Dries's avatar
   
Dries committed
112
  $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
113
114
  $output .= "</rss>\n";

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

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

}

function blog_feed_last() {
Dries's avatar
   
Dries committed
122
  $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
123
  while ($blog = db_fetch_object($result)) {
Dries's avatar
   
Dries committed
124
    $items .= format_rss_item($blog->title, path_uri() ."module.php?mod=blog&op=view&id=$blog->nid", $blog->body);
Dries's avatar
   
Dries committed
125
126
127
128
129
130
131
  }

  $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
132
133
  header("Content-Type: text/xml");

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

}

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

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

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

Dries's avatar
   
Dries committed
152
  $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
153

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

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

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

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

Dries's avatar
   
Dries committed
162
163
164
    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
165
166
    }

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

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

    if ($blog->comment) {
Dries's avatar
   
Dries committed
176
      $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
177
178
179
180
181
    }

    $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
182
  }
Dries's avatar
   
Dries committed
183

Dries's avatar
   
Dries committed
184
  $output .= "</table>";
Dries's avatar
   
Dries committed
185
  $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
186

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

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

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

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

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

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

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

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

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

    if ($blog->comment) {
Dries's avatar
   
Dries committed
213
      $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
214
    }
Dries's avatar
   
Dries committed
215

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

Dries's avatar
   
Dries committed
219
  }
Dries's avatar
   
Dries committed
220

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

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

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

Dries's avatar
   
Dries committed
230
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
  $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
264

Dries's avatar
   
Dries committed
265
  return $output;
Dries's avatar
   
Dries committed
266
267
268
269
}


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

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

Dries's avatar
   
Dries committed
299
300
}

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

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

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

Dries's avatar
   
Dries committed
313
  if ($type == "node" && $node->type == "blog") {
Dries's avatar
   
Dries committed
314
    $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
315
316
  }

Dries's avatar
   
Dries committed
317
318
319
320
321
  return $links ? $links : array();
}


function blog_block() {
Dries's avatar
   
Dries committed
322
323
  global $user;

Dries's avatar
   
Dries committed
324
  $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
325
326

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

Dries's avatar
   
Dries committed
330
331
332
  $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
333
  $block[0]["content"] = $output;
Dries's avatar
   
Dries committed
334
  $block[0]["info"] = t("User blogs");
Dries's avatar
   
Dries committed
335
336
337
338
339
340
  $block[0]["link"] = "module.php?mod=blog";

  return $block;
}

?>