Index: favorite_nodes.module =================================================================== --- favorite_nodes.module (revision 20) +++ favorite_nodes.module (working copy) @@ -12,6 +12,7 @@ define('FAVORITE_NODES_PROFILE_LIMIT', 'favorite_nodes_profile_limit'); define('FAVORITE_NODES_PAGE_TYPE', 'favorite_nodes_page_type'); define('FAVORITE_NODES_MENUS', 'favorite_nodes_menu'); +define('FAVORITE_NODES_ADD_OWN_NODES', 'favorite_nodes_add_own_nodes'); /** * Implementation of hook_help(). @@ -262,11 +263,10 @@ * Implementation of hook_links(). */ function favorite_nodes_link($type, $node = null, $teaser = false) { - global $user; $links = array(); if ($type == 'node' && !$teaser) { if (variable_get(FAVORITE_NODES_NODE_TYPE . $node->type, 0)) { - if (user_access(FAVORITE_NODES_PERM_ADD)) { + if (_favorite_nodes_can_add($node)) { if (!_favorite_nodes_check($node->nid)) { $links[] = array('title' => t('add to favorites'), 'href' => 'favorite_nodes/add/'. $node->nid); } @@ -283,6 +283,21 @@ } /** + * Test if a node can be favorited + */ +function _favorite_nodes_can_add($node) { + global $user; + + if (!user_access(FAVORITE_NODES_PERM_ADD)) + return false; + + if ($user->uid != $node->uid) + return true; + + return (bool)variable_get(FAVORITE_NODES_ADD_OWN_NODES, 1); +} + +/** * Settings page for this module. */ function favorite_nodes_settings() { @@ -340,6 +355,14 @@ ); } + $form[FAVORITE_NODES_ADD_OWN_NODES] = array( + '#type' => 'checkbox', + '#title' => t('Users may favorite their own nodes'), + '#return_value' => 1, + '#default_value' => variable_get(FAVORITE_NODES_ADD_OWN_NODES, 1), + '#description' => t('May users add their own nodes as favorite ones?'), + ); + return system_settings_form($form); }