Index: blogroll/INSTALL.txt
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/blogroll/INSTALL.txt,v
retrieving revision 1.4
diff -u -r1.4 INSTALL.txt
--- blogroll/INSTALL.txt 13 Feb 2005 05:59:29 -0000 1.4
+++ blogroll/INSTALL.txt 6 Jun 2007 11:58:53 -0000
@@ -4,12 +4,18 @@
using these steps.
1) The table is named "blogroll". If you use a prefix for your tables edit
- blogroll.mysql and change the name in the line: CREATE TABLE blogroll (
+ blogroll.mysql or blogroll.pgsql and change the name in the line:
+ CREATE TABLE blogroll (
+ If using blogroll.pgsql, also fix the line beginning with:
+ CREATE INDEX blogroll_uid_url_idx
2) From the command line, type 'mysql -u username -p drupal < blogroll.mysql'
where drupal is your drupal database and username is your mysql username.
+ For PostgreSQL users the command syntax is as
+ 'psql -U username -d drupal < blogroll.pgsql'.
-3) Copy blogroll.module to your drupal installation's module directory
+3) Copy the entire blogroll directory to your drupal installation's
+ /sites/all/modules directory.
4) Activate the module from administer >> modules
@@ -33,6 +39,3 @@
6) Login as a user and navigate to your own blog to get a point and click
interface.
-7) Another feature is the polling of a user's blogroll from an external
- location. This works for personal blogrolls and the community blogroll.
-
Index: blogroll/README.txt
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/blogroll/README.txt,v
retrieving revision 1.7
diff -u -r1.7 README.txt
--- blogroll/README.txt 13 Feb 2005 05:59:29 -0000 1.7
+++ blogroll/README.txt 6 Jun 2007 11:58:53 -0000
@@ -1,6 +1,8 @@
/* $Id: README.txt,v 1.7 2005/02/13 05:59:29 grantbow Exp $ */
-NOTE: blogroll.pgsql is untested.
+NOTE: Module does NOT currently support module installation scheme used in
+Drupal 5. You'll have to create the database table manually. Please read
+INSTALL.txt!
This module provides a standard blogroll feature. Each user's blog has it's
own blogroll. The owner of the blog can edit his own blogroll. All users that
@@ -31,15 +33,12 @@
I have created a project page http://drupal.org/project/blogroll.
It has patches under discussion, bugs and release downloads.
-Aldon Hynes added functionality so that blogrolls
-can be retrieved externally using the following bit of javascript. This will
-return the blog roll for user 1. If the /1 is omitted, it will return the
-community blogroll. This is a combination of all users' entries sorted by
-frequency.
-
-
+Possibility to load blogrolls externally by javascript is removed from
+Drupal 5 compatible version. If you need this feature please re-implement
+it and submit a patch.
Module Author:
Grant Bowman
+Module upgraded to Drupal 5 by:
+Pekka L J Jalkanen
Index: blogroll/blogroll.info
===================================================================
RCS file: blogroll/blogroll.info
diff -N blogroll/blogroll.info
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ blogroll/blogroll.info 6 Jun 2007 11:58:53 -0000
@@ -0,0 +1,3 @@
+; $Id$
+name = Blogroll
+description = Provides personal bloggers with a blogroll block and a community blogroll.
\ No newline at end of file
Index: blogroll/blogroll.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/blogroll/blogroll.module,v
retrieving revision 1.10
diff -u -r1.10 blogroll.module
--- blogroll/blogroll.module 31 Jan 2005 02:37:41 -0000 1.10
+++ blogroll/blogroll.module 6 Jun 2007 11:58:54 -0000
@@ -2,171 +2,252 @@
// $Id: blogroll.module,v 1.10 2005/01/31 02:37:41 grantbow Exp $
/**
- * @file
- * Enables users to provide a blogroll with their blogs.
- */
-
-/**
- * Implementation of hook_help().
- *
- * @param $section
- * provides help for /admin/modules and /admin/help and admin/settings/blogroll.
- *
- * @return
- * A brief message for administrators to explain what this module does
+ * Implementation of hook_help
*/
function blogroll_help($section) {
switch ($section) {
- case 'admin/modules#description':
- return t('Provides personal bloggers with a blogroll block and a community blogroll.');
case 'admin/help#blogroll':
- return ''. t('The blogroll block must be enabled and should contain a path.') .'
'. t('If you are vewing a blog and are the owner you may click \"Edit.\"') .'
';
+ $output = ''. t('The blogroll block must be enabled and should contain a path.') .'
'. t('If you are vewing a blog and are the owner you may click \"Edit.\"') .'
';
case 'admin/settings/blogroll':
- return t('A blogroll block provides personal bloggers with an editable list of other interesting blogs. Blogrolls only make sense from a blog perspective so a path must be used when enabling the block. A community blogroll provides a listing of all blogrolled blogs sorted by frequency and name.');
+ $output .= t('A blogroll block enables personal bloggers to maintain an editable list of links to other blogs they find interesting. Blogrolls only make sense from a blog perspective so a path must be used when enabling the block. A community blogroll provides a listing of all blogrolled blogs sorted by frequency and name.');
+ return $output;
}
}
/**
- * Implementation of hook_menu().
- *
- * @return
- * Arrays containing paths to be accessed.
+ * Implementation of hook_menu
*/
function blogroll_menu($may_cache) {
- global $user;
$items = array();
-
+
if ($may_cache) {
- $items[] = array('path' => 'blogroll/edit', 'title' => t('edit blogroll'),
- 'callback' => 'blogroll_edit',
- 'access' => user_access('edit own blog'), // depends on blog.module
- 'type' => MENU_CALLBACK);
- $items[] = array('path' => 'blogroll', 'title' => t('community blogroll'),
+ $items[] = array('path' => 'blogroll', 'title' => variable_get('blogroll_title', t('Blogroll')),
'callback' => 'blogroll_page',
- 'access' => TRUE,
+ 'access' => user_access('access content'),
'type' => MENU_CALLBACK);
- $items[] = array('path' => 'blogroll/script', 'title' => t('blogroll'),
- 'callback' => 'blogroll_script',
- 'access' => TRUE,
+ $items[] = array('path' => 'blogroll/edit', 'title' => t('Edit blogroll'),
+ 'callback' => 'blogroll_edit_page',
+ 'access' => user_access('edit own blog'), //Depends on blog.module
'type' => MENU_CALLBACK);
+ $items[] = array('path' => 'admin/settings/blogroll',
+ 'title' => variable_get('blogroll_title', t('Blogroll')),
+ 'description' => t('Define basic settings for per-user and community blogrolls.'),
+ 'callback' => 'drupal_get_form',
+ 'callback arguments' => array('blogroll_admin_settings'),
+ 'access' => user_access('administer site configuration'),
+ 'type' => MENU_NORMAL_ITEM);
}
return $items;
}
/**
- * Implementation of hook_settings()
- *
- * @return
- * The settings controls
+ * Admin settings callback.
*/
-function blogroll_settings() {
+function blogroll_admin_settings() {
// add a checkbox for showing/hiding cnt for each url?
- $group = form_select(t('Number of blogs listed in the community blogroll block'), 'blogroll_block_num', variable_get('blogroll_block_num', '5'), drupal_map_assoc(array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)), t('Number of blogs to show for the ?q=blog community blogroll block.') );
- return form_group(t('Community blogroll block settings'), $group);
+ $form = array();
+ $form['blogroll']['blogroll_title'] = array(
+ '#type' => 'textfield',
+ '#title' => t('The title used for the blogroll'),
+ '#default_value' => variable_get('blogroll_title', 'Blogroll'),
+ );
+ $form['blogroll']['blogroll_description'] = array(
+ '#type' => 'textarea',
+ '#title' => t('The description of the blogroll, for use on the blogroll page'),
+ '#default_value' => variable_get('blogroll_description', t('A community blogroll is a list of all the blogs linked by personal bloggers of this site. It is sorted by frequency, then by name. The most frequent blogs may be provided by a block.')),
+ );
+ $form['blogroll']['blogroll_block_num'] = array(
+ '#type' => 'select',
+ '#title' => t('Number of blogs listed sidebar'),
+ '#default_value' => variable_get('blogroll_block_num', '10'),
+ '#options' => drupal_map_assoc(array(5, 10, 15, 20, 25, 30)),
+ );
+ $form['blogroll']['blogroll_show_popularity'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Show popularity'),
+ '#default_value' => variable_get('blogroll_show_popularity', 1),
+ '#return_value' => 1,
+ );
+ return system_settings_form($form);
+}
+
+/**
+ * Menu callback; displays the blogroll editing page
+ */
+function blogroll_edit_page() {
+ global $user;
+ $output = '';
+
+ if ($user->uid) {
+ $output = drupal_get_form('blogroll_edit_form', $user->uid);
+ $output .= drupal_get_form('blogroll_edit_add_form');
+ }
+
+ return $output;
}
/**
* Prepare the blogroll display portion of the page
*/
-function blogroll_edit_display($edit, $uid) {
- $output = ''. t('After making changes click \'Update blogs.\'.') .'
';
+function blogroll_edit_form($uid) {
- // display roll_form with it's table
- $roll_form = '';
- $header = array(t('Delete'), t('URL'), t('Name'), t('Weight'));
+ //Display roll_form with it's table
$rolls = db_query("SELECT b.uid, b.name, b.url, b.weight FROM {blogroll} b WHERE b.uid = %d ORDER BY b.weight", $uid);
while ($roll = db_fetch_object($rolls)) {
- $rows[] = array(
- array('data' => form_checkbox(NULL, $roll->url .'][delete', 1, 0), 'align' => 'center', 'class' => 'delete'),
- array('data' => $roll->url, 'class' => 'url'),
- array('data' => form_textfield(NULL, $roll->url .'][name', $roll->name, 30, 128), 'class' => 'name'),
- array('data' => form_weight(NULL, $roll->url .'][weight', $roll->weight), 'class' => 'weight')
- );
- }
- if (!$rows) {
- $rows[] = array(
- array('data' => t('No blogs available in your blogroll.'), 'class' => 'no_blogrolls', 'colspan' => '3')
- );
- $roll_form .= theme('table', $header, $rows);
- } else {
- $roll_form .= theme('table', $header, $rows);
- $roll_form .= form_submit(t('Update blogs'));
+ $form['old'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Edit your present blogroll items'),
+ '#collapsible' => TRUE,
+ '#tree' => TRUE,
+ );
+ $form['old'][check_plain($roll->url)]['delete'] = array(
+ '#type' => 'checkbox',
+ '#default_value' => 0,
+ '#return_value' => 1,
+ );
+
+ $form['old'][check_plain($roll->url)]['url'] = array(
+ '#type' => 'textfield',
+ '#maxlength' => 128,
+ '#size' => 25,
+ '#default_value' => check_plain($roll->url),
+ );
+
+ $form['old'][check_plain($roll->url)]['name'] = array(
+ '#type' => 'textfield',
+ '#maxlength' => 128,
+ '#size' => 25,
+ '#default_value' => check_plain($roll->name),
+ );
+
+ $form['old'][check_plain($roll->url)]['weight'] = array(
+ '#type' => 'weight',
+ '#default_value' => check_plain($roll->weight),
+ );
+
+ $form['old']['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Update blogs'),
+ );
}
- $output .= form($roll_form, 'post', url('blogroll/edit'));
- return form_group(t('Current blogs'), $output);
+ return $form;
}
/**
* Prepare the blogroll adding portion of the page
*/
-function blogroll_edit_add_form($edit) {
- $edit['url'] = 'http://';
- $output = '
'. t('After adding click \'Add blog.\'') .'
';
- // user inputs for url and name
- $header = array(t('URL'), t('Name'), t('Weight'));
- $row[] = array(
- array('data' => form_textfield(NULL, 'url', $edit['url'], 50, 128), 'class' => 'url'),
- array('data' => form_textfield(NULL, 'name', $edit['name'], 30, 128), 'class' => 'name'),
- array('data' => form_weight(NULL, 'weight', $edit['weight']), 'class' => 'weight')
- );
- $form = theme('table', $header, $row);
- $form .= form_submit(t('Add blog'));
- $output .= form($form, 'post', url('blogroll/edit'));
- return form_group(t('New blog'), $output);
+function blogroll_edit_add_form() {
+ $form = array();
+
+ $form['new'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Add a new blogroll item'),
+ '#collapsible' => TRUE,
+ '#tree' => TRUE,
+ );
+
+ $form['new']['url'] = array(
+ '#type' => 'textfield',
+ '#maxlength' => 128,
+ '#size' => 25,
+ );
+
+ $form['new']['name'] = array(
+ '#type' => 'textfield',
+ '#maxlength' => 128,
+ '#size' => 25,
+ );
+
+ $form['new']['weight'] = array(
+ '#type' => 'weight',
+ );
+
+ $form['new']['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Add blog'),
+ );
+
+ return $form;
}
-/**
- * Menu callback; displays the blogroll editing page
- */
-function blogroll_edit() {
+function blogroll_edit_add_form_submit($form_id, $edit) {
global $user;
+ $uid = $user->uid;
+ // process post data
+ if ($edit['new']['url'] and $edit['new']['name']) {
+ db_query("INSERT INTO {blogroll} VALUES ('%d', '%s', '%s', '%d')", $uid, $edit['new']['url'], $edit['new']['name'], $edit['new']['weight']);
+ drupal_set_message( t('The blog was added.'));
+ cache_clear_all();
+ drupal_goto('blogroll/edit');
+ drupal_set_message( t('Your blogrolls have been updated.'));
+ cache_clear_all();
+ drupal_goto('blogroll/edit');
+ }
+}
- $output = '';
+function blogroll_edit_form_submit($form_id, $edit) {
+ global $user;
$uid = $user->uid;
- $edit = $_POST['edit'];
- $op = $_POST['op'];
-
- if ($uid) {
- // process post data
- switch($op) {
- case 'Add blog':
- if ($edit['url'] and $edit['name']) {
- // if ! 404 $edit[url] {};
- db_query("INSERT into {blogroll} values ('%d', '%s', '%s', '%d')", $uid, $edit['url'], $edit['name'], $edit['weight']);
- drupal_set_message( t('The blog was added.'));
- cache_clear_all();
- drupal_goto('blogroll/edit');
- }
- case 'Update blogs':
- foreach ($edit as $url => $roll) {
- if ($roll['delete']) {
- db_query("DELETE FROM {blogroll} WHERE uid = '%d' AND url= '%s'", $uid, $url);
- } else {
- db_query("UPDATE {blogroll} b SET b.name = '%s', b.weight = %d WHERE b.uid = '%d' AND b.url = '%s'", $roll['name'], $roll['weight'], $uid, $url);
- }
- };
- drupal_set_message( t('Your blogrolls have been updated.'));
- cache_clear_all();
- drupal_goto('blogroll/edit');
+ // process post data
+ //print_r($edit);
+ foreach ($edit['old'] as $url => $roll) {
+ if ($roll['delete'] == 1) {
+ db_query("DELETE FROM {blogroll} WHERE uid = '%d' AND url= '%s'", $uid, $url);
+ } else {
+ //Note that since this is an update, roll['url'] and $url may differ.
+ db_query("UPDATE {blogroll} SET url = '%s', name = '%s', weight = %d WHERE uid = '%d' AND url = '%s'", $roll['url'], $roll['name'], $roll['weight'], $uid, $url);
}
+ };
+ drupal_set_message( t('Your blogrolls have been updated.'));
+ cache_clear_all();
+ drupal_goto('blogroll/edit');
+}
- $output = ''. t('Your blogroll is shown on your personal blog\'s page.') .'
';
- $output .= blogroll_edit_display($edit, $uid);
- $output .= blogroll_edit_add_form($edit);
+function theme_blogroll_edit_add_form($form) {
+ //$output = '
'. t('Add a new blog to your blogroll:') .'
';
+ $header = array(t('URL'), t('Name'), t('Weight'));
+
+ $row = array();
+ $row[] = drupal_render($form['new']['url']);
+ $row[] = drupal_render($form['new']['name']);
+ $row[] = drupal_render($form['new']['weight']);
+
+ $rows = array($row);
+
+ $form['new']['#children'] = theme('table', $header, $rows);
+ $form['new']['#children'] .= drupal_render($form['new']['submit']);
+ $output .= drupal_render($form);
+ return $output;
+}
+
+function theme_blogroll_edit_form($form) {
+ $output = ''. t('Your blogroll is shown on your personal blog\'s page.');
+ $header = array(t('Delete'), t('URL'), t('Name'), t('Weight'));
+ foreach (element_children($form['old']) as $key) {
+ if(!($key == 'submit')) { //This test avoids an empty table line in output.
+ $row = array();
+ $row[] = drupal_render($form['old'][$key]['delete']);
+ $row[] = drupal_render($form['old'][$key]['url']);
+ $row[] = drupal_render($form['old'][$key]['name']);
+ $row[] = drupal_render($form['old'][$key]['weight']);
+ $rows[] = $row;
+ }
+ }
+ if(!$rows) {
+ $output .= ' ' . t('It is currently empty. You may add some links using form below.') . '
';
+ return $output;
}
- print theme('page', $output);
+ $form['old']['#children'] = theme('table', $header, $rows);
+ $form['old']['#children'] .= drupal_render($form['old']['submit']);
+ $output .= '
';
+ $output .= drupal_render($form);
+ return $output;
}
+
/**
- * Implementation of hook_block();
- *
- * @param $op
- * Operation 'list' or 'view'. If omitted 'list' is used.
- * @param $delta
- * If omitted, 0 is used.
- *
- * @return a block containing the blogroll
+ * Implementation of hook_block.
*/
function blogroll_block($op = 'list', $delta = 0) {
global $user;
@@ -177,33 +258,52 @@
case('view'):
if (user_access('access content')) {
$output = '';
+ $nodetype == arg(0);
$request_uid = arg(1); // arg(1), won't work when URL is non-numeric or viewing a blog node
- if ((arg(0) == 'blogroll') and (arg(1) == 'edit')) { // for /blogroll/edit
- $request_uid = $user->uid;
+ //The following tries to find out, if non-numeric URL is a path alias
+ if (!($nodetype === 'blog' && is_numeric($request_uid))) {
+ $real_args = explode('/', (drupal_get_normal_path($_GET['q'])));
+ $nodetype = $real_args[0];
+ $request_uid = $real_args[1];
+ }
+ if (!($nodetype == 'blog')) {
+ if ((arg(0) == 'blogroll') and (arg(1) == 'edit')) { // for /blogroll/edit
+ $request_uid = $user->uid;
+ }
+ else return NULL;
}
if ($request_uid) {
- $block['subject'] = t('Blogroll');
+ $block['subject'] = variable_get('blogroll_title', t('Blogroll'));
$rolls = db_query("SELECT b.uid, b.name, b.url, b.weight FROM {blogroll} b WHERE b.uid = %d ORDER BY b.weight", $request_uid);
while ($roll = db_fetch_object($rolls) and ($count < variable_get('blogroll_block_num', '5'))) {
- $output .= '- '. $roll->name .'
';
- }
- $output .= t('
');
- if ($user->uid == $request_uid) { // owner viewing own blog
- $output .= ''. l('edit', 'blogroll/edit', array('title' => t('Edit'))) .'
';
+ $notempty = TRUE;
+ $output .= ''. check_plain($roll->name) .'';
}
+ $output .= '';
} else { // for community /blog collection and /blogroll
- $block['subject'] = t('Community blogroll');
+ $block['subject'] = variable_get('blogroll_title', t('Blogroll'));
// should handle identical URLs with different names.
$rolls = db_query_range('SELECT b.name, b.url, count(*) as cnt FROM {blogroll} b GROUP BY b.name, b.url ORDER BY cnt, b.name', 0, variable_get('blogroll_block_num', 5));
while ($roll = db_fetch_object($rolls)) {
- $output .= ''. $roll->name .' ('. $roll->cnt .')';
+ $notempty = TRUE;
+ $output .= ''. check_plain($roll->name) . '';
+ if (variable_get('blogroll_show_popularity', 1)) {
+ $output .= ' ('. check_plain($roll->cnt) .')';
+ }
+ $output .= '';
}
- $output .= t('');
- $output .= ''. l('more', 'blogroll', array('title' => t('more'))) .'
';
+ $output .= '';
}
+ $output .= '';
+ if (/*user_access('create blog posts') ||*/ $user->uid == $request_uid) {
+ $output .= l('edit', 'blogroll/edit', array('title' => t('Edit'))) . ' | ';
+ }
+ $output .= l('more', 'blogroll', array('title' => t('more')));
+ $output .= '
';
+
$block['content'] = $output;
}
- return $block;
+ if($user->uid == $request_uid || $notempty) return $block;
}
}
@@ -211,39 +311,17 @@
* Menu callback; displays a Drupal page containing all blogrolled blogs
*/
function blogroll_page($uid = 0) {
- $output = ''. t('A community blogroll is a list of all the blogs blogrolled by personal bloggers of this site. It is sorted by frequency, then by name. The most frequent blogs may be provided by a block.') .'
';
+ $output = ''. variable_get('blogroll_description', t('A community blogroll is a list of all the blogs blogrolled by personal bloggers of this site. It is sorted by frequency, then by name. The most frequent blogs may be provided by a block.')) . '
';
$output .= '';
// should handle identical URLs with different names.
$rolls = db_query('SELECT b.name, b.url, count(*) as cnt FROM {blogroll} b GROUP BY b.name, b.url ORDER BY cnt, b.name');
while ($roll = db_fetch_object($rolls)) {
- $output .= '- '. $roll->name .' ('. $roll->cnt .')
';
+ $output .= '- '. $roll->name . '';
+ if (variable_get('blogroll_show_popularity', 1)) {
+ $output .= '('. $roll->cnt .')';
+ }
+ $output .= '
';
}
$output .= '
';
- print theme('page', $output);
-}
-
-
-/**
- * Output a javascript function
- * Called by hook_menu() to "draw" a blogroll
- * If no uid is provided output all user's blogrolls grouped by frequency
- */
-function blogroll_script() {
- print "\n";
-
+ return $output;
}
-
-?>