blog.module 11.3 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
6
7
8
9
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.");
 $output .= form_select(t("Minimum number of words in a node"), "minimum_blog_size", variable_get("minimum_node_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."));

 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 $user;
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
    if ($user->uid == $node->uid) {
      /*
      ** Updating your own blog entry will demote it (if promoted),
      ** and will queue it in the moderation queue for promotion.
      */

      return array("promote" => 0, "moderate" => 1, "score" => 0, "votes" => 0, "users" => 0);
    }
    else {
      /*
      ** When an administrator updates someone else' blog entry, it
      ** will not be changed unless explicitly specified.
      */

      return array();
    }
Dries's avatar
   
Dries committed
74
75
76
77
  }

}

Dries's avatar
   
Dries committed
78
79
80
81
82
83
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
84
function blog_feed_user($uid = 0, $date = 0) {
Dries's avatar
   
Dries committed
85
86
  global $user;

Dries's avatar
   
Dries committed
87
88
89
90
91
92
93
94
95
96
  if ($uid) {
    $account = user_load(array("uid" => $uid, "status" => 1));
  }
  else {
    $account = $user;
  }

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

Dries's avatar
   
Dries committed
98
  $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
99
100
101
102
  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
103
104
  $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
  $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
105
106
  $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
  $output .= "<rss version=\"0.91\">\n";
Dries's avatar
   
Dries committed
107
  $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
108
109
  $output .= "</rss>\n";

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

Dries's avatar
   
Dries committed
112
113
114
115
116
  print $output;

}

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

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

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

}

Dries's avatar
   
Dries committed
133
function blog_page_user($uid = 0, $date = 0) {
Dries's avatar
   
Dries committed
134
135
  global $theme, $user;

Dries's avatar
   
Dries committed
136
137
138
139
140
141
  if ($uid) {
    $account = user_load(array("uid" => $uid, "status" => 1));
  }
  else {
    $account = $user;
  }
Dries's avatar
   
Dries committed
142

Dries's avatar
   
Dries committed
143
144
145
146
  if (!$date) {
    $date = time();
  }

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

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

Dries's avatar
   
Dries committed
151
152
153
  while ($node = db_fetch_object($result)) {

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

Dries's avatar
   
Dries committed
155
156
    $links = array();

Dries's avatar
   
Dries committed
157
158
159
    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
160
161
    }

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

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

    if ($blog->comment) {
Dries's avatar
   
Dries committed
171
      $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
172
173
174
175
176
    }

    $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
177
  }
Dries's avatar
   
Dries committed
178

Dries's avatar
   
Dries committed
179
  $output .= "</table>";
Dries's avatar
   
Dries committed
180
  $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
181

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

Dries's avatar
Dries committed
185
function blog_page_last() {
Dries's avatar
   
Dries committed
186
  global $theme, $user;
Dries's avatar
   
Dries committed
187

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

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

Dries's avatar
   
Dries committed
192
193
  while ($node = db_fetch_object($result)) {
    $blog = node_load(array("nid" => $node->nid));
Dries's avatar
   
Dries committed
194

Dries's avatar
   
Dries committed
195
196
    $links = array();

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

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

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

    if ($blog->comment) {
Dries's avatar
   
Dries committed
208
      $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
209
    }
Dries's avatar
   
Dries committed
210

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

Dries's avatar
   
Dries committed
214
  }
Dries's avatar
   
Dries committed
215

Dries's avatar
   
Dries committed
216
  $output .= "</table>";
Dries's avatar
   
Dries committed
217
  $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
218

Dries's avatar
   
Dries committed
219
  $theme->box(t("User blogs"), $output, "main");
Dries's avatar
   
Dries committed
220
221
}

Dries's avatar
   
Dries committed
222
function blog_form($node, $help, $error) {
Dries's avatar
   
Dries committed
223
224
  global $nid, $iid;

Dries's avatar
   
Dries committed
225
226
227
228
229
230
231
232

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

    /*
    ** 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
249
    if ($nid && $blog = node_load(array("nid" => $nid))) {
Dries's avatar
   
Dries committed
250
      $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
251
252
253
    }

    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
254
      $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
255
256
    }
  }
Dries's avatar
   
Dries committed
257

Dries's avatar
   
Dries committed
258
  $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
259

Dries's avatar
   
Dries committed
260
  return $output;
Dries's avatar
   
Dries committed
261
262
263
264
}


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

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

Dries's avatar
   
Dries committed
294
295
}

Dries's avatar
   
Dries committed
296
function blog_link($type, $node = 0) {
Dries's avatar
   
Dries committed
297
298
  global $user;

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

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

Dries's avatar
   
Dries committed
308
  if ($type == "node" && $node->type == "blog") {
Dries's avatar
   
Dries committed
309
    $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
310
311
  }

Dries's avatar
   
Dries committed
312
313
314
315
316
  return $links ? $links : array();
}


function blog_block() {
Dries's avatar
   
Dries committed
317
318
  global $user;

Dries's avatar
   
Dries committed
319
  $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
320
321

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

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

  return $block;
}

?>