You are here

function usermerge_usermerge_build_review_form_elements in User Merge 7.2

Implement hook_usermerge_build_review_form_elements().

File

./usermerge.usermerge.inc, line 156
Implements User merge hooks for core-related user properties.

Code

function usermerge_usermerge_build_review_form_elements($review, $account_properties, $user_to_delete, $user_to_keep) {

  // Build form elements
  // Set very low weight to keep properties controlled by this file at the top of the table
  $i = -10000;
  foreach ($account_properties as $property_type => $properties) {

    // User properties
    if (in_array($property_type, array(
      'core',
      'fields',
      'other',
    ))) {
      $review[$property_type] = array(
        '#tree' => TRUE,
        '#theme' => 'usermerge_data_review_form_table',
        '#title' => $properties['title'],
        '#weight' => $i,
      );
      if (isset($properties['description'])) {
        $review[$property_type]['#description'] = $properties['description'];
      }
      if ($property_type == 'fields') {
        $review[$property_type]['#attributes']['property_label'] = t('Field');
      }
      foreach ($properties['items'] as $property) {
        $property_name = $property['name'];

        // Properties with default behaviors will not be displayed
        if (!array_key_exists('default', $property)) {
          $review[$property_type][$property_name]['property_name'] = array(
            '#type' => 'markup',
            '#markup' => $property_name,
          );

          // Display property values
          $field_user_to_delete = $user_to_delete->{$property_name};
          $field_user_to_keep = $user_to_keep->{$property_name};
          switch ($property_name) {

            // Roles must be dealt with separately
            case 'roles':
              $field_user_to_delete = implode(', ', $user_to_delete->{$property_name});
              $field_user_to_keep = implode(', ', $user_to_keep->{$property_name});
              break;
            case 'picture':
              if ($user_to_delete->{$property_name}) {
                $filepath_user_to_delete = image_style_url('thumbnail', $user_to_delete->{$property_name}->uri);
                $field_user_to_delete = theme('image', array(
                  'path' => $filepath_user_to_delete,
                ));
              }
              if ($user_to_keep->{$property_name}) {
                $filepath_user_to_keep = image_style_url('thumbnail', $user_to_keep->{$property_name}->uri);
                $field_user_to_keep = theme('image', array(
                  'path' => $filepath_user_to_keep,
                ));
              }
              break;
          }

          // Process custom fields for display
          if ($property_type == 'fields') {
            if (is_array($field_user_to_delete)) {
              $field_user_to_delete = field_view_field('user', $user_to_delete, $property_name, array(
                'label' => 'hidden',
                'settings' => array(),
              ));
              $field_user_to_delete = strip_tags(drupal_render($field_user_to_delete), '<em> <strong> <ul> <li>');
            }
            if (is_array($field_user_to_keep)) {
              $field_user_to_keep = field_view_field('user', $user_to_keep, $property_name, array(
                'label' => 'hidden',
                'settings' => array(),
              ));
              $field_user_to_keep = strip_tags(drupal_render($field_user_to_keep), '<em> <strong> <ul> <li>');
            }
          }
          $review[$property_type][$property_name]['options'] = array(
            '#type' => 'radios',
            '#options' => array(
              'user_to_delete' => is_string($field_user_to_delete) ? $field_user_to_delete : '',
              'user_to_keep' => is_string($field_user_to_keep) ? $field_user_to_keep : '',
            ),
          );
          if (isset($property['default_option'])) {
            $review[$property_type][$property_name]['options']['#default_value'] = $property['default_option'];
          }
          else {
            $review[$property_type][$property_name]['options']['#default_value'] = 'user_to_keep';
          }
          switch ($property['criterion']) {
            case 'merge':
              $review[$property_type][$property_name]['options']['#options']['merge'] = 'merge';
              break;
            case 'force_select':

              // Nothing happens here
              $review[$property_type][$property_name]['options']['#options']['merge'] = 'force_select';
              break;
            case 'no_merge':
              $review[$property_type][$property_name]['options']['#options']['merge'] = 'no_merge';

              // uid and (if not editable, mail and name) should be visible but disabled.
              if (!empty($property['disabled'])) {
                $review[$property_type][$property_name]['options']['#disabled'] = TRUE;
              }
              break;
          }
          if (isset($property['default_option'])) {
            $review[$property_type][$property_name]['options']['#default_value'] = $property['default_option'];
          }
        }
        else {
          $account[$property_name] = $property['default'];
        }
      }
    }
    elseif ($property_type == 'entities') {
      $content_user_to_delete = usermerge_query_authored_entities($properties['items'], $user_to_delete->uid);
      $content_user_to_keep = usermerge_query_authored_entities($properties['items'], $user_to_keep->uid);
      if (count($content_user_to_delete) || count($content_user_to_keep)) {
        $review[$property_type] = array(
          '#tree' => TRUE,
          '#theme' => 'usermerge_data_review_form_table',
          '#title' => $properties['title'],
          '#attributes' => array(
            'no_merge',
            'property_label' => t('Entity'),
          ),
          '#weight' => $i,
        );
        foreach ($content_user_to_delete as $entity_type => $entities) {
          $review[$property_type][$entity_type]['property_name'] = array(
            '#type' => 'markup',
            '#markup' => $entity_type,
          );
          $review[$property_type][$entity_type]['options']['user_to_delete'] = array(
            '#type' => 'markup',
            '#markup' => format_plural(count($entities), '1 %entity entity to be reassigned', '@count %entity entities to be reassigned', array(
              '%entity' => $entity_type,
            )),
          );
        }
        foreach ($content_user_to_keep as $entity_type => $entities) {
          $review[$property_type][$entity_type]['property_name'] = array(
            '#type' => 'markup',
            '#markup' => $entity_type,
          );
          $review[$property_type][$entity_type]['options']['user_to_keep'] = array(
            '#type' => 'markup',
            '#markup' => format_plural(count($entities), '1 %entity entity to be maintained', '@count %entity entities to be maintained', array(
              '%entity' => $entity_type,
            )),
          );
        }
        ksort($review[$property_type]);
      }
    }

    // Increments weight
    $i++;
  }
  if (isset($account)) {
    $review['account'] = array(
      '#type' => 'hidden',
      '#value' => serialize($account),
    );
  }
  return $review;
}