user_block

5 user.module user_block($op = 'list', $delta = 0, $edit = array())
6 user.module user_block($op = 'list', $delta = 0, $edit = array())

Implementation of hook_block().

File

modules/user.module, line 525
Enables the user registration and login system.

Code

function user_block($op = 'list', $delta = 0, $edit = array()) {
  global $user;

  if ($op == 'list') {
    $blocks[0]['info'] = t('User login');
    $blocks[1]['info'] = t('Navigation');
    $blocks[2]['info'] = t('Who\'s new');
    $blocks[3]['info'] = t('Who\'s online');

    return $blocks;
  }
  else if ($op == 'configure' && $delta == 3) {
    $period = drupal_map_assoc(array(30, 60, 120, 180, 300, 600, 900, 1800, 2700, 3600, 5400, 7200, 10800, 21600, 43200, 86400), 'format_interval');
    $form['user_block_seconds_online'] = array(
      '#type' => 'select',
      '#title' => t('User activity'),
      '#default_value' => variable_get('user_block_seconds_online', 900),
      '#options' => $period,
      '#description' => t('A user is considered online for this long after they have last viewed a page.'),
    );
    $form['user_block_max_list_count'] = array(
      '#type' => 'select',
      '#title' => t('User list length'),
      '#default_value' => variable_get('user_block_max_list_count', 10),
      '#options' => drupal_map_assoc(array(0, 5, 10, 15, 20, 25, 30, 40, 50, 75, 100)),
      '#description' => t('Maximum number of currently online users to display.'),
    );

    return $form;
  }
  else if ($op == 'save' && $delta == 3) {
    variable_set('user_block_seconds_online', $edit['user_block_seconds_online']);
    variable_set('user_block_max_list_count', $edit['user_block_max_list_count']);
  }
  else if ($op == 'view') {
    $block = array();

    switch ($delta) {
      case 0:
        // For usability's sake, avoid showing two login forms on one page.
        if (!$user->uid && !(arg(0) == 'user' && !is_numeric(arg(1)))) {
          $form['#action'] = url($_GET['q'], drupal_get_destination());
          $form['#id'] = 'user-login-form';
          $form['name'] = array(
            '#type' => 'textfield', 
            '#title' => t('Username'), 
            '#maxlength' => 60, 
            '#size' => 15, 
            '#required' => TRUE,
          );
          $form['pass'] = array(
            '#type' => 'password', 
            '#title' => t('Password'), 
            '#maxlength' => 60, 
            '#size' => 15, 
            '#required' => TRUE,
          );
          $form['submit'] = array(
            '#type' => 'submit', 
            '#value' => t('Log in'),
          );

          if (variable_get('user_register', 1)) {
            $items[] = l(t('Create new account'), 'user/register', array('title' => t('Create a new user account.')));
          }
          $items[] = l(t('Request new password'), 'user/password', array('title' => t('Request new password via e-mail.')));
          $form['links'] = array('#value' => theme('item_list', $items));

          $block['subject'] = t('User login');
          $block['content'] = drupal_get_form('user_login_block', $form, 'user_login');
        }
        return $block;

      case 1:
        if ($menu = theme('menu_tree')) {
          $block['subject'] = $user->uid ? check_plain($user->name) : t('Navigation');
          $block['content'] = $menu;
        }
        return $block;

      case 2:
        if (user_access('access content')) {
          // Retrieve a list of new users who have subsequently accessed the site successfully.
          $result = db_query_range('SELECT uid, name FROM {users} WHERE status != 0 AND access != 0 ORDER BY created DESC', 0, 5);
          while ($account = db_fetch_object($result)) {
            $items[] = $account;
          }
          $output = theme('user_list', $items);

          $block['subject'] = t('Who\'s new');
          $block['content'] = $output;
        }
        return $block;

      case 3:
        if (user_access('access content')) {
          // Count users with activity in the past defined period.
          $time_period = variable_get('user_block_seconds_online', 900);

          // Perform database queries to gather online user lists.
          $guests = db_fetch_object(db_query('SELECT COUNT(sid) AS count FROM {sessions} WHERE timestamp >= %d AND uid = 0', time() - $time_period));
          $users = db_query('SELECT uid, name, access FROM {users} WHERE access >= %d AND uid != 0 ORDER BY access DESC', time() - $time_period);
          $total_users = db_num_rows($users);

          // Format the output with proper grammar.
          if ($total_users == 1 && $guests->count == 1) {
            $output = t('There is currently %members and %visitors online.', array('%members' => format_plural($total_users, '1 user', '%count users'), '%visitors' => format_plural($guests->count, '1 guest', '%count guests')));
          }
          else {
            $output = t('There are currently %members and %visitors online.', array('%members' => format_plural($total_users, '1 user', '%count users'), '%visitors' => format_plural($guests->count, '1 guest', '%count guests')));
          }

          // Display a list of currently online users.
          $max_users = variable_get('user_block_max_list_count', 10);
          if ($total_users && $max_users) {
            $items = array();

            while ($max_users-- && $account = db_fetch_object($users)) {
              $items[] = $account;
            }

            $output .= theme('user_list', $items, t('Online users'));
          }

          $block['subject'] = t('Who\'s online');
          $block['content'] = $output;
        }
        return $block;
    }
  }
}
Login or register to post comments