You are here

user_badges.admin.inc in User Badges 7.4

Contains administrative UI for User Badge.

File

includes/user_badges.admin.inc
View source
<?php

/**
 * @file
 * Contains administrative UI for User Badge.
 */

/**
 * Implements hook_form().
 */
function user_badge_form($form, &$form_state, $user_badge = NULL) {
  $form = array();
  $form['name'] = array(
    '#title' => t('Badge Name'),
    '#type' => 'textfield',
    '#default_value' => isset($user_badge->name) ? check_plain($user_badge->name) : '',
    '#description' => t('Name assigned to this user badge'),
    '#required' => TRUE,
    '#maxlength' => 255,
  );
  $form['weight'] = array(
    '#title' => t('Badge Weight'),
    '#type' => 'weight',
    '#default_value' => isset($user_badge->weight) ? $user_badge->weight : '0',
    '#description' => t('Name assigned to this user badge'),
    '#required' => TRUE,
    '#delta' => 5,
  );
  field_attach_form('user_badge', $user_badge, $form, $form_state);
  $form['actions'] = array(
    '#type' => 'actions',
    'submit' => array(
      '#type' => 'submit',
      '#value' => isset($user_badge->bid) ? t('Update User Badge') : t('Save User Badge'),
    ),
    'delete_link' => array(
      '#markup' => isset($user_badge->bid) ? l(t('Delete'), 'admin/content/user_badge/manage/' . $user_badge->bid . '/delete', array(
        'attributes' => array(
          'id' => array(
            'user-badge-delete-' . $user_badge->bid,
          ),
          'class' => array(
            'button remove',
          ),
        ),
        'query' => array(
          'destination' => 'admin/content/user_badge',
        ),
      )) : '',
    ),
  );
  return $form;
}

/**
 * Implements hook_form_validate().
 */
function user_badge_form_validate($form, &$form_state) {
}

/**
 * Implements hook_form_submit().
 */
function user_badge_form_submit($form, &$form_state) {
  $user_badge = entity_ui_form_submit_build_entity($form, $form_state);
  $user_badge
    ->save();
  drupal_set_message(t('@name user badge has been saved.', array(
    '@name' => $user_badge->name,
  )));
  $form_state['redirect'] = 'user-badge/' . $user_badge->bid;
}

/**
 * Confirmation before bulk deleting user badge.
 */
function user_badges_bulk_delete($form, &$form_state, $bids) {
  $bids = explode('|', $bids);
  $user_badges = user_badge_load_multiple($bids);
  $form = array();
  $form_state['bids'] = $bids;
  $variables = array(
    'type' => 'ul',
    'items' => array(),
    'title' => '',
    'attributes' => array(),
  );
  foreach ($user_badges as $user_badge) {
    $variables['items'][] = check_plain($user_badge->name);
  }
  $form['summary'] = array(
    '#markup' => theme_item_list($variables),
  );
  return confirm_form($form, t('Delete these user badges?'), 'admin/content/user_badge', t('Are you sure you want to delete these user badges?'), t('Delete all'), t('Cancel'));
}

/**
 * Implements hook_submit().
 */
function user_badges_bulk_delete_submit($form, &$form_state) {
  $bids = $form_state['bids'];
  user_badge_delete_multiple($bids);
  drupal_set_message(t('User Badges deleted'));
  drupal_goto('admin/content/user_badge');
}

/**
 * Form builder: roles form.
 */
function user_badges_roles_form($form, &$form_state) {

  // No badges for the anonymous role.
  $roles = user_roles(TRUE);
  $role_badges = user_badges_get_roles(NULL, array(
    'returnbadges' => TRUE,
  ));
  $form['user_badges_role'] = array(
    '#type' => 'fieldset',
    '#title' => t('Role Badges'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
    '#tree' => TRUE,
    '#weight' => 10,
  );

  // Determine which selector type the user wants to use to set badges
  // from their settings.
  // If the user wants to use the drop-down selector,
  // display that if there are records in the db.
  if (variable_get('user_badges_selector_type', 1) == 0) {

    // First, load all the available badges from the database
    // by calling the following helper function.
    $result = user_badges_load_badges();

    // Display the drop-down only if we get any records.
    if (count($result)) {
      foreach ($result as $badge) {
        $options[$badge->bid] = t('Badge') . ' ' . $badge->bid . ' ' . '-' . ' ' . check_plain($badge->name);
      }
      $form['user_badges_blocked_badge'] = array(
        '#type' => 'select',
        '#title' => t('Blocked user'),
        '#empty_option' => '- None -',
        '#options' => $options,
        '#default_value' => variable_get('user_badges_blocked_badge', '0'),
        '#weight' => 0,
      );
      $user_badge_roles = variable_get('user_badges_role', 0);
      foreach ($roles as $rid => $role) {
        $default = '';
        if (isset($user_badge_roles[$rid]) && $user_badge_roles[$rid]) {
          $default = $user_badge_roles[$rid];
        }
        $form['user_badges_role'][$rid] = array(
          '#type' => 'select',
          '#title' => check_plain($role),
          '#empty_option' => '- None -',
          '#options' => $options,
          '#default_value' => $default,
        );
      }
    }
  }
  else {
    $default = '';
    $user_badge = user_badge_load(variable_get('user_badges_blocked_badge', 0));
    if ($user_badge) {
      $default = check_plain($user_badge->name) . ' (' . $user_badge->bid . ')';
    }
    $form['user_badges_blocked_badge'] = array(
      '#type' => 'textfield',
      '#title' => t('Blocked user'),
      '#size' => 40,
      '#maxlength' => 255,
      '#autocomplete_path' => 'entityreference/autocomplete/single/user_badge_badges/user/user/',
      '#default_value' => $default,
      '#weight' => 0,
    );
    $user_badge_roles = variable_get('user_badges_role', 0);
    foreach ($roles as $rid => $role) {
      $default = '';
      if (isset($user_badge_roles[$rid]) && $user_badge_roles[$rid]) {
        $user_badge = user_badge_load($user_badge_roles[$rid]);
        if ($user_badge) {
          $default = check_plain($user_badge->name) . ' (' . $user_badge->bid . ')';
        }
      }
      $form['user_badges_role'][$rid] = array(
        '#type' => 'textfield',
        '#title' => check_plain($role),
        '#maxlength' => 255,
        '#autocomplete_path' => 'entityreference/autocomplete/single/user_badge_badges/user/user/',
        '#default_value' => $default,
      );
    }
  }
  $form['#submit'][] = 'user_badges_roles_form_add_badges_submit';
  return system_settings_form($form);
}

/**
 * Submit for add badges to corresponding users.
 */
function user_badges_roles_form_add_badges_submit($form, &$form_state) {
  $values = $form_state['values'];
  $blocked = $values['user_badges_blocked_badge'];
  $roles = $values['user_badges_role'];
  if ($blocked) {
    user_badges_add_role_based_badge($blocked, FALSE, TRUE);
  }
  foreach ($roles as $rid => $bid) {
    if ($bid) {
      user_badges_add_role_based_badge($bid, $rid);
    }
    else {
      $remove_badges[] = $rid;
    }
  }
  user_badges_ensure_old_roles_badges_removed($roles, $blocked);
}

/**
 * Validation function for user_badges_roles_form.
 */
function user_badges_roles_form_validate($form, &$form_state) {
  $array = array(
    'user_badges_blocked_badge' => $form_state['values']['user_badges_blocked_badge'],
  ) + $form_state['values']['user_badges_role'];
  $errors = FALSE;
  foreach (array_count_values($array) as $key => $count) {
    if ($key && $count > 1) {
      form_set_error('', t("You shouldn't use same badge for more than one role (or for blocked user and one role)"));
      $errors = TRUE;
      break;
    }
  }
  if (!$errors && variable_get('user_badges_selector_type', 1)) {
    $values =& $form_state['values'];
    if ($values['user_badges_blocked_badge']) {
      $parts = explode('(', $values['user_badges_blocked_badge']);
      $values['user_badges_blocked_badge'] = substr(end($parts), 0, -1);
    }
    foreach ($values['user_badges_role'] as $key => &$value) {
      $parts = explode('(', $value);
      $value = substr(end($parts), 0, -1);
    }
  }
}

/**
 * Form for general module settings.
 */
function user_badges_settings_form($form, &$form_state) {
  $noyes = array(
    t('No'),
    t('Yes'),
  );

  /*$form['user_badges_showblocked'] = array(
      '#type' => 'radios',
      '#options' => $noyes,
      '#title' => t('Only show blocked user badge'),
      '#default_value' => variable_get('user_badges_showblocked', 0),
      '#description' => t('If checked, only the badge associated to blocked users will be shown, overriding other badges the user eventually has as well as any other settings.') . ' ' .
      t('Note that if there is no badge associated to blocked users, no badges will appear.') . ' ' .
      t('This option only acts on blocked users and has no repercussions on active user badges.'),
      '#attributes' => array('class' => array('container-inline')),
    );*/
  $form['user_badges_userweight'] = array(
    '#type' => 'radios',
    '#options' => $noyes,
    '#title' => t('Allow users to reorder badges'),
    '#default_value' => variable_get('user_badges_userweight', 0),
    '#description' => t('If checked, users will have the ability to reweight their badges in their profile, enabling them to set what order their badges display, and also which badges will display if a limit is set above.') . ' ' . t('Note that you can make individual badges exempt from this function, allowing you to force them to the top or bottom of the list by giving them a very high or low weight value.'),
    '#attributes' => array(
      'class' => array(
        'container-inline',
      ),
    ),
  );
  $form['user_badges_selector_type'] = array(
    '#type' => 'select',
    '#options' => array(
      0 => t('drop-down multi-select'),
      1 => t('autocomplete'),
    ),
    '#title' => t('Selector to set a badge'),
    '#default_value' => variable_get('user_badges_selector_type', 1),
    '#description' => t('Select which type of selector to use to set a badge.'),
    '#attributes' => array(
      'class' => array(
        'container-inline',
      ),
    ),
  );
  return system_settings_form($form);
}

/**
 * Validate user_badges_settings_form input.
 */
function user_badges_settings_form_validate($form, $form_state) {
}

Functions

Namesort descending Description
user_badges_bulk_delete Confirmation before bulk deleting user badge.
user_badges_bulk_delete_submit Implements hook_submit().
user_badges_roles_form Form builder: roles form.
user_badges_roles_form_add_badges_submit Submit for add badges to corresponding users.
user_badges_roles_form_validate Validation function for user_badges_roles_form.
user_badges_settings_form Form for general module settings.
user_badges_settings_form_validate Validate user_badges_settings_form input.
user_badge_form Implements hook_form().
user_badge_form_submit Implements hook_form_submit().
user_badge_form_validate Implements hook_form_validate().