blog.module in Drupal 4
Enables keeping an easily and regularly updated web page or a blog.
File
modules/blog.moduleView source
<?php
/**
* @file
* Enables keeping an easily and regularly updated web page or a blog.
*/
/**
* Implementation of hook_node_info().
*/
function blog_node_info() {
return array(
'blog' => array(
'name' => t('blog entry'),
'base' => 'blog',
),
);
}
/**
* Implementation of hook_perm().
*/
function blog_perm() {
return array(
'edit own blog',
);
}
/**
* Implementation of hook_access().
*/
function blog_access($op, $node) {
global $user;
if ($op == 'create') {
return user_access('edit own blog') && $user->uid;
}
if ($op == 'update' || $op == 'delete') {
if (user_access('edit own blog') && $user->uid == $node->uid) {
return TRUE;
}
}
}
/**
* Implementation of hook_user().
*/
function blog_user($type, &$edit, &$user) {
if ($type == 'view' && user_access('edit own blog', $user)) {
$items[] = array(
'title' => t('Blog'),
'value' => l(t('view recent blog entries'), "blog/{$user->uid}", array(
'title' => t("Read %username's latest blog entries.", array(
'%username' => $user->name,
)),
)),
'class' => 'blog',
);
return array(
t('History') => $items,
);
}
}
/**
* Implementation of hook_help().
*/
function blog_help($section) {
switch ($section) {
case 'admin/help#blog':
$output = '<p>' . t('The blog module allows registered users to maintain an online weblog (commonly known as a blog), often referred to as an online journal or diary. Blogs are made up of individual posts that are time stamped and are typically viewed by date as you would a diary. Blogs often contain links to webpages users have read and/or agree/disagree with.') . '</p>';
$output .= '<p>' . t('The blog module adds a <em>user blogs</em> navigation link to the site, which takes any visitor to a page that displays the most recent blog entries from all the users on the site. The navigation menu has a <em>create a blog entry</em> link (which takes you to a submission form) and a <em>view personal blog</em> link (which displays your blog entries as other people will see them). The blog module also creates a <em>recent blog posts</em> block that can be enabled.') . '</p>';
$output .= '<p>' . t('If a user has the ability to post blogs, then the import module (news aggregator) will display a blog-it link next to each news item in its lists. Clicking on this takes the user to the blog submission form, with the title, a link to the item, and a link to the source into the body text already in the text box, ready for the user to add a comment or explanation. This actively encourages people to add blog entries about things they see and hear elsewhere in the website and from your syndicated partner sites.') . '</p>';
$output .= t('<p>You can</p>
<ul>
<li>read your blog via your user profile at <a href="%user">my account</a>.</li>
<li>post a blog at <a href="%node-add-blog">create content >> personal blog entry</a>.</li>
<li>administer blog at <a href="%admin-node-configure-types-blog">administer >> settings >> content types >> configure blog entry</a>.</li>
<li>administer blog api at <a href="%admin-settings-blogapi">administer >> settings >> blogapi</a>.</li>
<li>enable the "recent blog posts" block at <a href="%admin-block">administer >> blocks</a> to show the 10 most recent blog posts.</li>
</ul>
', array(
'%user' => url('user'),
'%node-add-blog' => url('node/add/blog'),
'%admin-node-configure-types-blog' => url('admin/settings/content-types/blog'),
'%admin-settings-blogapi' => url('admin/settings/blogapi'),
'%admin-block' => url('admin/block'),
));
$output .= '<p>' . t('For more information please read the configuration and customization handbook <a href="%blog">Blog page</a>.', array(
'%blog' => 'http://drupal.org/handbook/modules/blog/',
)) . '</p>';
return $output;
case 'admin/modules#description':
return t('Enables keeping an easily and regularly updated web page or a blog.');
case 'node/add#blog':
return t("A blog is a regularly updated journal or diary made up of individual posts shown in reversed chronological order. A blog is tightly coupled to the author so each user will have his 'own' blog.");
}
}
/**
* Displays an RSS feed containing recent blog entries of a given user.
*/
function blog_feed_user($uid = 0) {
global $user;
if ($uid) {
$account = user_load(array(
'uid' => $uid,
'status' => 1,
));
}
else {
$account = $user;
}
$result = db_query_range(db_rewrite_sql("SELECT n.nid, n.title, r.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {node_revisions} r ON n.vid = r.vid INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND u.uid = %d AND n.status = 1 ORDER BY n.created DESC"), $uid, 0, variable_get('feed_default_items', 10));
$channel['title'] = $account->name . "'s blog";
$channel['link'] = url("blog/{$uid}", NULL, NULL, TRUE);
$channel['description'] = $term->description;
node_feed($result, $channel);
}
/**
* Displays an RSS feed containing recent blog entries of all users.
*/
function blog_feed_last() {
$result = db_query_range(db_rewrite_sql("SELECT n.nid, n.title, r.teaser, n.created, u.name, u.uid FROM {node} n INNER JOIN {node_revisions} r ON n.vid = r.vid INNER JOIN {users} u ON n.uid = u.uid WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, variable_get('feed_default_items', 10));
$channel['title'] = variable_get('site_name', 'drupal') . ' blogs';
$channel['link'] = url('blog', NULL, NULL, TRUE);
$channel['description'] = $term->description;
node_feed($result, $channel);
}
/**
* Menu callback; displays a Drupal page containing recent blog entries.
*/
function blog_page($a = NULL, $b = NULL) {
if (is_numeric($a)) {
// $a is a user ID
if ($b == 'feed') {
return blog_feed_user($a);
}
else {
return blog_page_user($a);
}
}
else {
if ($a == 'feed') {
return blog_feed_last();
}
else {
return blog_page_last();
}
}
}
/**
* Displays a Drupal page containing recent blog entries of a given user.
*/
function blog_page_user($uid) {
global $user;
$account = user_load(array(
is_numeric($uid) ? 'uid' : 'name' => $uid,
'status' => 1,
));
if ($account->uid) {
drupal_set_title($title = t("%name's blog", array(
'%name' => check_plain($account->name),
)));
if ($account->uid == $user->uid && user_access('edit own blog')) {
$output = '<li>' . l(t('Post new blog entry.'), "node/add/blog") . '</li>';
}
else {
if ($account->uid == $user->uid) {
$output = '<li>' . t('You are not allowed to post a new blog entry.') . '</li>';
}
}
if ($output) {
$output = '<ul>' . $output . '</ul>';
}
else {
$output = '';
}
$result = pager_query(db_rewrite_sql("SELECT n.nid, n.sticky, n.created FROM {node} n WHERE type = 'blog' AND n.uid = %d AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC"), variable_get('default_nodes_main', 10), 0, NULL, $account->uid);
while ($node = db_fetch_object($result)) {
$output .= node_view(node_load($node->nid), 1);
}
$output .= theme('pager', NULL, variable_get('default_nodes_main', 10));
$output .= theme('feed_icon', url("blog/{$account->uid}/feed"));
drupal_add_link(array(
'rel' => 'alternate',
'type' => 'application/rss+xml',
'title' => t('RSS - %title', array(
'%title' => $title,
)),
'href' => url("blog/{$account->uid}/feed"),
));
return $output;
}
else {
drupal_not_found();
}
}
/**
* Displays a Drupal page containing recent blog entries of all users.
*/
function blog_page_last() {
global $user;
$output = '';
$result = pager_query(db_rewrite_sql("SELECT n.nid, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), variable_get('default_nodes_main', 10));
while ($node = db_fetch_object($result)) {
$output .= node_view(node_load($node->nid), 1);
}
$output .= theme('pager', NULL, variable_get('default_nodes_main', 10));
$output .= theme('feed_icon', url('blog/feed'));
drupal_add_link(array(
'rel' => 'alternate',
'type' => 'application/rss+xml',
'title' => t('RSS - blogs'),
'href' => url("blog/feed"),
));
return $output;
}
/**
* Implementation of hook_form().
*/
function blog_form(&$node) {
global $nid;
$iid = $_GET['iid'];
if (empty($node->body)) {
/*
** If the user clicked a "blog it" link, we load the data from the
** database and quote it in the blog:
*/
if ($nid && ($blog = node_load($nid))) {
$node->body = '<em>' . $blog->body . '</em> [' . l($blog->name, "node/{$nid}") . ']';
}
if ($iid && ($item = db_fetch_object(db_query('SELECT i.*, f.title as ftitle, f.link as flink FROM {aggregator_item} i, {aggregator_feed} f WHERE i.iid = %d AND i.fid = f.fid', $iid)))) {
$node->title = $item->title;
// Note: $item->description has been validated on aggregation.
$node->body = '<a href="' . check_url($item->link) . '">' . check_plain($item->title) . '</a> - <em>' . $item->description . '</em> [<a href="' . check_url($item->flink) . '">' . check_plain($item->ftitle) . "</a>]\n";
}
}
$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#required' => TRUE,
'#default_value' => $node->title,
'#weight' => -5,
);
$form['body_filter']['body'] = array(
'#type' => 'textarea',
'#title' => t('Body'),
'#default_value' => $node->body,
'#rows' => 20,
'#required' => TRUE,
);
$form['body_filter']['filter'] = filter_form($node->format);
return $form;
}
/**
* Implementation of hook_view().
*/
function blog_view(&$node, $teaser = FALSE, $page = FALSE) {
if ($page) {
// Breadcrumb navigation
$breadcrumb[] = array(
'path' => 'blog',
'title' => t('blogs'),
);
$breadcrumb[] = array(
'path' => 'blog/' . $node->uid,
'title' => t("%name's blog", array(
'%name' => $node->name,
)),
);
$breadcrumb[] = array(
'path' => 'node/' . $node->nid,
);
menu_set_location($breadcrumb);
}
$node = node_prepare($node, $teaser);
}
/**
* Implementation of hook_link().
*/
function blog_link($type, $node = 0, $main = 0) {
$links = array();
if ($type == 'node' && $node->type == 'blog') {
if (arg(0) != 'blog' || arg(1) != $node->uid) {
$links[] = l(t("%username's blog", array(
'%username' => $node->name,
)), "blog/{$node->uid}", array(
'title' => t("Read %username's latest blog entries.", array(
'%username' => $node->name,
)),
));
}
}
return $links;
}
/**
* Implementation of hook_menu().
*/
function blog_menu($may_cache) {
global $user;
$items = array();
if ($may_cache) {
$items[] = array(
'path' => 'node/add/blog',
'title' => t('blog entry'),
'access' => user_access('edit own blog'),
);
$items[] = array(
'path' => 'blog',
'title' => t('blogs'),
'callback' => 'blog_page',
'access' => user_access('access content'),
'type' => MENU_SUGGESTED_ITEM,
);
$items[] = array(
'path' => 'blog/' . $user->uid,
'title' => t('my blog'),
'access' => user_access('edit own blog'),
'type' => MENU_DYNAMIC_ITEM,
);
}
return $items;
}
/**
* Implementation of hook_block().
*
* Displays the most recent 10 blog titles.
*/
function blog_block($op = 'list', $delta = 0) {
global $user;
if ($op == 'list') {
$block[0]['info'] = t('Recent blog posts');
return $block;
}
else {
if ($op == 'view') {
if (user_access('access content')) {
$result = db_query_range(db_rewrite_sql("SELECT n.nid, n.title, n.created FROM {node} n WHERE n.type = 'blog' AND n.status = 1 ORDER BY n.created DESC"), 0, 10);
if (db_num_rows($result)) {
$block['content'] = node_title_list($result);
$block['content'] .= '<div class="more-link">' . l(t('more'), 'blog', array(
'title' => t('Read the latest blog entries.'),
)) . '</div>';
$block['subject'] = t('Recent blog posts');
return $block;
}
}
}
}
}
Functions
Name | Description |
---|---|
blog_access | Implementation of hook_access(). |
blog_block | Implementation of hook_block(). |
blog_feed_last | Displays an RSS feed containing recent blog entries of all users. |
blog_feed_user | Displays an RSS feed containing recent blog entries of a given user. |
blog_form | Implementation of hook_form(). |
blog_help | Implementation of hook_help(). |
blog_link | Implementation of hook_link(). |
blog_menu | Implementation of hook_menu(). |
blog_node_info | Implementation of hook_node_info(). |
blog_page | Menu callback; displays a Drupal page containing recent blog entries. |
blog_page_last | Displays a Drupal page containing recent blog entries of all users. |
blog_page_user | Displays a Drupal page containing recent blog entries of a given user. |
blog_perm | Implementation of hook_perm(). |
blog_user | Implementation of hook_user(). |
blog_view | Implementation of hook_view(). |