blog.module 10.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
15
16
17
18
19
20
21
22
23
function blog_node($field) {
  global $user;

  $info = array("name" => "personal blog");

  return $info[$field];
}

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

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

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

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

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

}

Dries's avatar
   
Dries committed
41
42
43
44
45
46
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
47
function blog_feed_user($uid = 0, $date = 0) {
Dries's avatar
   
Dries committed
48
49
  global $user;

Dries's avatar
   
Dries committed
50
51
52
53
54
55
56
57
58
59
  if ($uid) {
    $account = user_load(array("uid" => $uid, "status" => 1));
  }
  else {
    $account = $user;
  }

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

Dries's avatar
   
Dries committed
61
  $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
62
63
64
65
  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
66
67
  $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
68
69
  $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
  $output .= "<rss version=\"0.91\">\n";
Dries's avatar
   
Dries committed
70
  $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
71
72
  $output .= "</rss>\n";

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

Dries's avatar
   
Dries committed
75
76
77
78
79
  print $output;

}

function blog_feed_last() {
Dries's avatar
   
Dries committed
80
  $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
81
  while ($blog = db_fetch_object($result)) {
Dries's avatar
   
Dries committed
82
    $items .= format_rss_item($blog->title, path_uri() ."module.php?mod=blog&op=view&id=$blog->nid", $blog->body);
Dries's avatar
   
Dries committed
83
84
85
86
87
88
89
  }

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

Dries's avatar
   
Dries committed
92
93
94
95
  print $output;

}

Dries's avatar
   
Dries committed
96
function blog_page_user($uid = 0, $date = 0) {
Dries's avatar
   
Dries committed
97
98
  global $theme, $user;

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

Dries's avatar
   
Dries committed
106
107
108
109
  if (!$date) {
    $date = time();
  }

Dries's avatar
   
Dries committed
110
  $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
111

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

Dries's avatar
   
Dries committed
114
115
116
  while ($node = db_fetch_object($result)) {

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

Dries's avatar
   
Dries committed
118
119
    $links = array();

Dries's avatar
   
Dries committed
120
121
122
    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
123
124
    }

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

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

    if ($blog->comment) {
Dries's avatar
   
Dries committed
134
      $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
135
136
137
138
139
    }

    $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
140
  }
Dries's avatar
   
Dries committed
141

Dries's avatar
   
Dries committed
142
  $output .= "</table>";
Dries's avatar
   
Dries committed
143
  $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
144

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

Dries's avatar
Dries committed
148
function blog_page_last() {
Dries's avatar
   
Dries committed
149
  global $theme, $user;
Dries's avatar
   
Dries committed
150

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

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

Dries's avatar
   
Dries committed
155
156
  while ($node = db_fetch_object($result)) {
    $blog = node_load(array("nid" => $node->nid));
Dries's avatar
   
Dries committed
157

Dries's avatar
   
Dries committed
158
159
    $links = array();

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

Dries's avatar
   
Dries committed
162
    if ($blog->uid == $user->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
    }
Dries's avatar
   
Dries committed
173

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

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\"><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(t("User blogs"), $output, "main");
Dries's avatar
   
Dries committed
183
184
}

Dries's avatar
   
Dries committed
185
function blog_form($node, $help, $error) {
Dries's avatar
   
Dries committed
186
187
  global $nid, $iid;

Dries's avatar
   
Dries committed
188
189
190
191
192
193
194
195

  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
196
197
198
199
      $error["body"] = "<div style=\"color: red;\">". t("The body of your blog is too short.") ."</div>";
    }
  }
  else {
Dries's avatar
   
Dries committed
200
201
202
203
204
205
206
207
208
209
210
211

    /*
    ** 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
212
    if ($nid && $blog = node_load(array("nid" => $nid))) {
Dries's avatar
   
Dries committed
213
      $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
214
215
216
    }

    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
217
      $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
218
219
    }
  }
Dries's avatar
   
Dries committed
220

Dries's avatar
   
Dries committed
221
  $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
222

Dries's avatar
   
Dries committed
223
  return $output;
Dries's avatar
   
Dries committed
224
225
}

Dries's avatar
   
Dries committed
226
function blog_save($node) {
Dries's avatar
   
Dries committed
227

Dries's avatar
   
Dries committed
228
  if ($node->nid) {
Dries's avatar
   
Dries committed
229
    return array();
Dries's avatar
   
Dries committed
230
231
  }
  else {
Dries's avatar
   
Dries committed
232
    return array("promote" => 0, "moderate" => 0, "status" => 1);
Dries's avatar
   
Dries committed
233
  }
Dries's avatar
   
Dries committed
234

Dries's avatar
   
Dries committed
235
236
237
}

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

Dries's avatar
   
Dries committed
240
  if (user_access("access content")) {
Dries's avatar
   
Dries committed
241
242
    switch ($op) {
      case "feed":
Dries's avatar
   
Dries committed
243
244
        if ($id) {
          blog_feed_user($id, $date);
Dries's avatar
   
Dries committed
245
246
247
248
249
250
        }
        else {
          blog_feed_last();
        }
        break;
      default:
Dries's avatar
Dries committed
251
        $theme->header();
Dries's avatar
   
Dries committed
252
253
        if ($id) {
          blog_page_user($id, $date);
Dries's avatar
   
Dries committed
254
255
256
257
        }
        else {
          blog_page_last();
        }
Dries's avatar
Dries committed
258
        $theme->footer();
Dries's avatar
   
Dries committed
259
260
    }
  }
Dries's avatar
   
Dries committed
261
  else {
Dries's avatar
Dries committed
262
    $theme->header();
Dries's avatar
Dries committed
263
    $theme->box(t("Access denied"), message_access());
Dries's avatar
Dries committed
264
    $theme->footer();
Dries's avatar
   
Dries committed
265
  }
Dries's avatar
Dries committed
266

Dries's avatar
   
Dries committed
267
268
}

Dries's avatar
   
Dries committed
269
function blog_link($type, $node = 0) {
Dries's avatar
   
Dries committed
270
271
  global $user;

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

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

Dries's avatar
   
Dries committed
281
  if ($type == "node" && $node->type == "blog") {
Dries's avatar
   
Dries committed
282
    $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
283
284
  }

Dries's avatar
   
Dries committed
285
286
287
288
289
  return $links ? $links : array();
}


function blog_block() {
Dries's avatar
   
Dries committed
290
291
  global $user;

Dries's avatar
   
Dries committed
292
  $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
293
294

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

Dries's avatar
   
Dries committed
298
299
300
  $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
301
  $block[0]["content"] = $output;
Dries's avatar
   
Dries committed
302
  $block[0]["info"] = t("User blogs");
Dries's avatar
   
Dries committed
303
304
305
306
307
308
  $block[0]["link"] = "module.php?mod=blog";

  return $block;
}

?>