uid); if (count($titles)) { $block['subject'] = t('Current signups'); $block['content'] = theme_item_list($titles) . l(t('View signup schedule'), "user/$user->uid/signups"); } return $block; } } } } /** * Private helper as a partial implementation of hook_user(). * * @see signup_user() */ function _signup_user_no_views($op, &$edit, &$user, $category = NULL) { switch ($op) { case 'view': // grab list of nodes the user signed up for. $signups = signup_list_user_signups($user->uid); if (count($signups)) { $output = '

'. t('Current signups') .' -- '. l(t('view signup schedule'), "user/$user->uid/signups") .'

'. theme_item_list($signups); } if (isset($output)) { return array(t('Signup information') => array(array('value' => $output, 'class' => 'user'))); } break; } } /** * Add menu items we only need to define if views is not enabled. */ function signup_no_views_menu(&$items, $may_cache) { global $user; $access = user_access('administer all signups'); if (!$may_cache) { // User signup schedule callback $items[] = array( 'path' => 'user/'. arg(1) .'/signups', 'access' => ($access || ($user->uid == arg(1))), 'type' => MENU_CALLBACK, 'callback' => 'signup_user_schedule', 'callback arguments' => array($uid => arg(1)), ); } } /** * Print a schedule of the given user's signups. * * @ingroup signup_callback */ function signup_user_schedule($uid) { $output = ''; $user = user_load(array('uid' => $uid)); if (!$user) { return drupal_not_found(); } require_once (SIGNUP_PATH .'/theme/signup.theme'); drupal_set_title(t('Signups for @user', array('@user' => $user->name))); $titles = signup_list_user_signups($user->uid); foreach ($titles as $nid => $title) { $node = node_load(array('nid' => $nid)); $output .= theme('signup_user_schedule', $node); } return $output; } /** * Return an array of all nodes the specified user has signed up for. * * @param $uid * The ID of the user to generate a list of signups for. * * @return * Array of all nodes the given user has signed up for. The array is indexed * by node ID, and contains titles as links to each node. */ function signup_list_user_signups($uid) { $titles = array(); // We don't want to return anything for anon users. if ($uid != 0) { $sql = "SELECT n.nid, n.title FROM {node} n INNER JOIN {signup_log} s_l ON n.nid = s_l.nid WHERE s_l.uid = %d ORDER BY n.nid"; $result = db_query(db_rewrite_sql($sql), $uid); while ($node = db_fetch_array($result)) { $titles[$node['nid']] = l($node['title'], 'node/'. $node['nid']); } } return $titles; }