2001-07-11 22:06:24 +00:00
<?php
2001-10-20 18:57:09 +00:00
// $Id$
2001-07-11 22:06:24 +00:00
2004-08-21 06:42:38 +00:00
/**
* @file
* Enables keeping an easily and regularly updated web page or a blog.
*/
2004-05-08 07:17:47 +00:00
/**
2005-08-29 19:58:49 +00:00
* Implementation of hook_node_info().
2004-05-08 07:17:47 +00:00
*/
2005-08-29 19:58:49 +00:00
function blog_node_info() {
2006-08-06 23:00:42 +00:00
return array(
'blog' => array(
2006-10-22 08:28:47 +00:00
'name' => t('Blog entry'),
2006-08-06 23:00:42 +00:00
'module' => 'blog',
'description' => t('A blog is a regularly updated journal or diary made up of individual posts shown in reversed chronological order. Each member of the site may create and maintain a blog.'),
)
);
2001-11-01 17:04:20 +00:00
}
2004-05-08 07:17:47 +00:00
/**
* Implementation of hook_perm().
*/
2002-12-10 20:35:20 +00:00
function blog_perm() {
2004-07-13 20:40:46 +00:00
return array('edit own blog');
2002-12-10 20:35:20 +00:00
}
2004-05-08 07:17:47 +00:00
/**
* Implementation of hook_access().
*/
2001-11-01 17:04:20 +00:00
function blog_access($op, $node) {
global $user;
2004-05-08 07:17:47 +00:00
if ($op == 'create') {
2004-07-13 20:40:46 +00:00
return user_access('edit own blog') && $user->uid;
2001-11-01 17:04:20 +00:00
}
2004-07-31 09:30:09 +00:00
if ($op == 'update' || $op == 'delete') {
if (user_access('edit own blog') && ($user->uid == $node->uid)) {
return TRUE;
}
2001-11-01 17:04:20 +00:00
}
}
2004-05-08 07:17:47 +00:00
/**
* Implementation of hook_user().
*/
2002-05-23 14:14:48 +00:00
function blog_user($type, &$edit, &$user) {
2004-07-13 20:40:46 +00:00
if ($type == 'view' && user_access('edit own blog', $user)) {
2007-06-21 04:38:41 +00:00
$user->content['summary']['blog'] = array(
'#type' => 'user_profile_item',
'#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)))),
'#attributes' => array('class' => 'blog'),
2005-10-07 06:11:12 +00:00
);
2002-05-23 14:14:48 +00:00
}
}
2004-05-08 07:17:47 +00:00
/**
* Implementation of hook_help().
*/
2007-06-30 19:46:58 +00:00
function blog_help($path, $arg) {
switch ($path) {
2003-10-09 18:53:22 +00:00
case 'admin/help#blog':
2006-11-21 20:03:11 +00:00
$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 web pages users have read and/or agree/disagree with.') .'</p>';
2006-05-07 00:08:36 +00:00
$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>';
2005-11-01 10:17:34 +00:00
$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>';
2006-08-18 12:17:00 +00:00
$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>';
2005-11-01 10:17:34 +00:00
return $output;
2003-08-05 18:33:39 +00:00
}
2004-05-08 07:17:47 +00:00
}
2003-05-29 09:15:00 +00:00
2004-05-08 07:17:47 +00:00
/**
* Implementation of hook_form().
*/
2004-07-04 16:50:02 +00:00
function blog_form(&$node) {
2003-06-02 18:11:54 +00:00
global $nid;
2007-01-31 15:49:26 +00:00
$iid = isset($_GET['iid']) ? (int)$_GET['iid'] : 0;
2006-08-06 23:00:42 +00:00
$type = node_get_types('type', $node);
2001-11-03 18:38:30 +00:00
2005-09-23 08:47:13 +00:00
2003-09-20 16:08:57 +00:00
if (empty($node->body)) {
2001-11-03 18:38:30 +00:00
/*
** If the user clicked a "blog it" link, we load the data from the
** database and quote it in the blog:
*/
2005-07-17 18:29:32 +00:00
if ($nid && $blog = node_load($nid)) {
2004-08-12 18:00:11 +00:00
$node->body = '<em>'. $blog->body .'</em> ['. l($blog->name, "node/$nid") .']';
2001-11-01 17:04:20 +00:00
}
2004-05-24 19:45:11 +00:00
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))) {
2002-06-10 19:49:16 +00:00
$node->title = $item->title;
2005-05-31 21:14:27 +00:00
// 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";
2001-11-01 17:04:20 +00:00
}
2005-10-07 06:11:12 +00:00
2001-11-01 17:04:20 +00:00
}
2001-07-11 22:06:24 +00:00
2007-01-31 15:49:26 +00:00
$form['title'] = array('#type' => 'textfield', '#title' => check_plain($type->title_label), '#required' => TRUE, '#default_value' => !empty($node->title) ? $node->title : NULL, '#weight' => -5);
2007-04-09 13:58:03 +00:00
$form['body_field'] = node_body_field($node, $type->body_label, $type->min_word_count);
2005-10-07 06:11:12 +00:00
return $form;
2001-07-11 22:06:24 +00:00
}
2004-05-08 07:17:47 +00:00
/**
* Implementation of hook_view().
*/
2006-08-10 15:42:33 +00:00
function blog_view($node, $teaser = FALSE, $page = FALSE) {
2003-11-25 19:26:21 +00:00
if ($page) {
2003-09-20 15:11:41 +00:00
// Breadcrumb navigation
2006-10-22 08:28:47 +00:00
$breadcrumb[] = array('path' => 'blog', 'title' => t('Blogs'));
2006-08-18 12:43:28 +00:00
$breadcrumb[] = array('path' => 'blog/'. $node->uid, 'title' => t("@name's blog", array('@name' => $node->name)));
2004-06-18 15:04:37 +00:00
$breadcrumb[] = array('path' => 'node/'. $node->nid);
menu_set_location($breadcrumb);
2003-09-20 15:11:41 +00:00
}
2006-08-10 15:42:33 +00:00
return node_prepare($node, $teaser);
2003-09-20 15:11:41 +00:00
}
2004-04-21 13:56:38 +00:00
/**
* Implementation of hook_link().
*/
2006-07-19 07:15:35 +00:00
function blog_link($type, $node = NULL, $teaser = FALSE) {
2003-04-21 14:55:03 +00:00
$links = array();
2004-04-21 13:56:38 +00:00
if ($type == 'node' && $node->type == 'blog') {
2005-07-29 21:39:18 +00:00
if (arg(0) != 'blog' || arg(1) != $node->uid) {
2006-05-18 14:58:57 +00:00
$links['blog_usernames_blog'] = array(
2006-08-20 07:07:17 +00:00
'title' => t("@username's blog", array('@username' => $node->name)),
2006-07-04 08:59:05 +00:00
'href' => "blog/$node->uid",
2006-08-27 12:43:18 +00:00
'attributes' => array('title' => t("Read @username's latest blog entries.", array('@username' => $node->name)))
2006-05-18 14:58:57 +00:00
);
2001-12-06 17:33:05 +00:00
}
2001-07-14 12:12:41 +00:00
}
2003-04-21 14:55:03 +00:00
return $links;
2001-07-11 22:06:24 +00:00
}
2004-06-18 15:04:37 +00:00
/**
* Implementation of hook_menu().
*/
2007-01-24 14:48:36 +00:00
function blog_menu() {
$items['blog'] = array(
2007-04-30 17:03:29 +00:00
'title' => 'Blogs',
2007-07-22 06:48:25 +00:00
'page callback' => 'blog_page_last',
2007-01-24 14:48:36 +00:00
'access arguments' => array('access content'),
'type' => MENU_SUGGESTED_ITEM,
2007-07-22 06:48:25 +00:00
'file' => 'blog.pages.inc',
);
$items['blog/%user/view'] = array(
'title' => 'Blogs',
'page callback' => 'blog_page_user',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
'file' => 'blog.pages.inc',
2007-01-24 14:48:36 +00:00
);
2007-02-11 09:30:51 +00:00
$items['blog/%user_current'] = array(
2007-04-30 17:03:29 +00:00
'title' => 'My blog',
2007-01-24 14:48:36 +00:00
'page arguments' => array(1),
'access arguments' => array('edit own blog'),
2007-07-22 06:48:25 +00:00
'file' => 'blog.pages.inc',
);
$items['blog/%user/feed'] = array(
'title' => 'Blogs',
'page callback' => 'blog_feed_user',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
'file' => 'blog.pages.inc',
);
$items['blog/feed'] = array(
'title' => 'Blogs',
'page callback' => 'blog_feed_last',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
'file' => 'blog.pages.inc',
2007-01-24 14:48:36 +00:00
);
2004-09-16 07:17:56 +00:00
2004-06-18 15:04:37 +00:00
return $items;
}
2004-05-08 07:17:47 +00:00
/**
* Implementation of hook_block().
*
* Displays the most recent 10 blog titles.
*/
function blog_block($op = 'list', $delta = 0) {
2001-09-16 11:33:14 +00:00
global $user;
2004-05-08 07:17:47 +00:00
if ($op == 'list') {
2004-07-08 15:09:53 +00:00
$block[0]['info'] = t('Recent blog posts');
2002-11-09 20:51:23 +00:00
return $block;
2002-10-26 15:17:26 +00:00
}
2004-10-31 07:34:47 +00:00
else if ($op == 'view') {
2004-05-08 07:17:47 +00:00
if (user_access('access content')) {
2005-07-02 11:58:16 +00:00
$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);
2007-08-12 15:55:36 +00:00
if ($node_title_list = node_title_list($result)) {
$block['content'] = $node_title_list;
2005-07-02 11:58:16 +00:00
$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;
}
2002-05-29 17:08:05 +00:00
}
2001-07-11 22:06:24 +00:00
}
}
2007-07-22 06:48:25 +00:00