You are here

class gdpr_fields_ui in General Data Protection Regulation 7

CTools Export UI class handler for GDPR Fields UI.

Hierarchy

Expanded class hierarchy of gdpr_fields_ui

1 string reference to 'gdpr_fields_ui'
gdpr_fields_ui.inc in modules/gdpr_fields/plugins/export_ui/gdpr_fields_ui.inc

File

modules/gdpr_fields/plugins/export_ui/gdpr_fields_ui.class.php, line 11
Contains the CTools Export UI integration code.

View source
class gdpr_fields_ui extends ctools_export_ui {
  protected $rows = array();
  protected $items = array();
  protected $entityPlugins = array();

  /**
   * {@inheritdoc}
   */
  public function hook_menu(&$items) {
    unset($this->plugin['menu']['items']['add']);

    // @todo Make sure import always overrides and never adds.
    $this->plugin['menu']['items']['import']['title'] = 'Override';
    parent::hook_menu($items);
  }

  /**
   * Get the options array for right to access field.
   *
   * @return array
   *   Right to access field options array.
   */
  protected function rtaOptions() {
    return array(
      '' => 'Not configured',
      'inc' => 'Included',
      'maybe' => 'Maybe included',
      'no' => 'Not included',
    );
  }

  /**
   * Get the options array for right to be forgotten field.
   *
   * @return array
   *   Right to be forgotten field options array.
   */
  protected function rtfOptions() {
    return array(
      '' => 'Not configured',
      'anonymise' => 'Anonymise',
      'remove' => 'Remove',
      'maybe' => 'Maybe included',
      'no' => 'Not included',
    );
  }

  /**
   * Gets all plugins for the same entity type as the one provided.
   *
   * @param GDPRFieldData $item
   *   The plugin to compare with.
   * @param bool $filter_unconfigured
   *   Exclude plugins that are not configured.
   *
   * @return GDPRFieldData[]
   *   Array of plugins found.
   */
  protected function getItemEntityPlugins(GDPRFieldData $item, $filter_unconfigured = FALSE) {
    $plugins = array();
    if (empty($this->entityPlugins[$item->entity_type])) {
      $entity_type = $item->entity_type;
      $this->entityPlugins[$entity_type] = array_filter($this->items, function ($item) use ($entity_type) {
        return $item->entity_type == $entity_type;
      });
    }
    foreach ($this->entityPlugins[$item->entity_type] as $plugin_name => $plugin) {
      if ($filter_unconfigured) {
        if ($plugin
          ->getSetting('gdpr_fields_rta', '') == '' && $plugin
          ->getSetting('gdpr_fields_rtf', '') == '') {
          continue;
        }
      }
      $plugins[$plugin_name] = $plugin;
    }
    return $plugins;
  }

  /**
   * {@inheritdoc}
   */
  public function list_build_row($item, &$form_state, $operations) {

    // Set up sorting.

    /* @var GDPRFieldData $item */
    $name = $item->{$this->plugin['export']['key']};

    // @todo Abstract id property getter out of tasks module or require module.
    $is_id = class_exists('Anonymizer') ? Anonymizer::propertyIsEntityId($item->entity_type, $item->property_name) : FALSE;
    switch ($form_state['values']['order']) {
      case 'disabled':
        $this->sorts[$name] = empty($item->disabled) . $name;
        break;
      case 'title':
        $this->sorts[$name] = $item->{$this->plugin['export']['admin_title']};
        break;
      case 'name':
        $this->sorts[$name] = $name;
        break;
    }
    $row['data'] = array();
    $row['class'] = !empty($item->disabled) ? array(
      'ctools-export-ui-disabled',
    ) : array(
      'ctools-export-ui-enabled',
    );

    // If we have an admin title, make it the first row.
    $row['data'][] = array(
      'data' => check_plain($item
        ->getSetting('label')),
      'class' => array(
        'ctools-export-ui-title',
      ),
    );
    $entity_info = entity_get_property_info($item->entity_type);
    if ($info = field_info_field($item->property_name)) {
      $type = $info['type'];

      // Highlight entity reference fields.
      if ($type == 'entityreference') {
        $type = '<strong>' . $type . '</strong>';
      }
    }
    else {
      $type = 'property';
      if (!empty($entity_info['properties'][$item->property_name]['type'])) {
        $type .= ':' . $entity_info['properties'][$item->property_name]['type'];
      }

      // Highlight entity ids.
      if ($is_id) {
        $type = '<strong>primary_key</strong>';
      }
    }
    $row['data'][] = array(
      'data' => $type,
      'class' => array(
        'ctools-export-ui-field-type',
      ),
    );
    $rta_labels = $this
      ->rtaOptions();
    $rtf_labels = $this
      ->rtfOptions();
    $row['data'][] = array(
      'data' => $rta_labels[$item
        ->getSetting('gdpr_fields_rta', '')],
      'class' => array(
        'ctools-export-ui-rta',
      ),
    );
    $rtf_label = $rtf_labels[$item
      ->getSetting('gdpr_fields_rtf', '')];

    // Label id with removal as remove entity.
    if ($is_id && $item
      ->getSetting('gdpr_fields_rtf', '') == 'remove') {
      $rtf_label = t('Delete entire entity');
    }
    $row['data'][] = array(
      'data' => $rtf_label,
      'class' => array(
        'ctools-export-ui-rtf',
      ),
    );
    $ops = theme('links__ctools_dropbutton', array(
      'links' => $operations,
      'attributes' => array(
        'class' => array(
          'links',
          'inline',
        ),
      ),
    ));
    $row['data'][] = array(
      'data' => $ops,
      'class' => array(
        'ctools-export-ui-operations',
      ),
    );

    // Add an automatic mouseover of the description if one exists.
    if (!empty($this->plugin['export']['admin_description'])) {
      $row['title'] = $item->{$this->plugin['export']['admin_description']};
    }
    $this->rows[$name] = $row;
  }

  /**
   * {@inheritdoc}
   */
  public function list_sort_options() {
    $options = parent::list_sort_options();
    unset($options['storage']);
    return $options;
  }

  /**
   * {@inheritdoc}
   */
  public function list_table_header() {
    $header = array();
    $header[] = array(
      'data' => t('Label'),
      'class' => array(
        'ctools-export-ui-title',
      ),
    );
    $header[] = array(
      'data' => t('Field type'),
      'class' => array(
        'ctools-export-ui-field-type',
      ),
    );
    $header[] = array(
      'data' => t('Right to access'),
      'class' => array(
        'ctools-export-ui-rta',
      ),
    );
    $header[] = array(
      'data' => t('Right to be forgotten'),
      'class' => array(
        'ctools-export-ui-rtf',
      ),
    );
    $header[] = array(
      'data' => t('Operations'),
      'class' => array(
        'ctools-export-ui-operations',
      ),
    );
    return $header;
  }

  /**
   * {@inheritdoc}
   */
  public function list_render(&$form_state) {
    $tables = array();
    $table_data = '';
    foreach ($this->rows as $name => $row) {
      list($entity_type, $entity_bundle, ) = explode('|', $name);
      $tables[$entity_type][$entity_bundle][$name] = $row;
    }
    foreach ($tables as $entity_type => $entities) {
      $fieldset_entity = array(
        'element' => array(
          '#title' => t('Entity: @entity', array(
            '@entity' => $entity_type,
          )),
          '#value' => '',
          '#children' => '<div>',
          '#attributes' => array(
            'class' => array(
              'collapsible',
            ),
          ),
        ),
      );
      if (count($entities) === 1) {
        $rows = reset($entities);
        $table = array(
          'header' => $this
            ->list_table_header(),
          'rows' => $rows,
          'empty' => $this->plugin['strings']['message']['no items'],
        );
        $fieldset_entity['element']['#value'] = theme('table', $table);
      }
      else {
        foreach ($entities as $bundle => $rows) {
          $table = array(
            'header' => $this
              ->list_table_header(),
            'rows' => $rows,
            'empty' => $this->plugin['strings']['message']['no items'],
          );
          $fieldset_bundle = array(
            'element' => array(
              '#title' => t('Bundle: @bundle', array(
                '@bundle' => $bundle,
              )),
              '#value' => theme('table', $table),
              '#children' => '<div>',
              '#attributes' => array(
                'class' => array(
                  'collapsible',
                ),
              ),
            ),
          );
          $fieldset_entity['element']['#value'] .= theme('fieldset', $fieldset_bundle);
        }
      }
      $table_data .= theme('fieldset', $fieldset_entity);
    }
    $content = array(
      '#type' => 'container',
      '#attributes' => array(
        'id' => 'ctools-export-ui-list-items',
      ),
      'data' => array(
        '#markup' => !empty($table_data) ? $table_data : $this->plugin['strings']['message']['no items'],
      ),
    );
    return drupal_render($content);
  }

  /**
   * {@inheritdoc}
   */
  public function list_form(&$form, &$form_state) {
    parent::list_form($form, $form_state);

    // Remove storage filter.
    unset($form['top row']['storage']);

    // Shrink search field slightly.
    $form['top row']['search']['#size'] = 30;
    $entities = array();
    foreach (entity_get_info() as $key => $entity_info) {
      $entities[$key] = $entity_info['label'];
    }
    $form['top row']['gdpr_entity'] = array(
      '#type' => 'select',
      '#title' => t('Entity'),
      '#options' => $entities,
      '#multiple' => TRUE,
      '#default_value' => array(),
    );
    $form['top row']['rta'] = array(
      '#type' => 'select',
      '#title' => t('Right to access'),
      '#options' => $this
        ->rtaOptions(),
      '#multiple' => TRUE,
      '#default_value' => array(),
    );
    $form['top row']['rtf'] = array(
      '#type' => 'select',
      '#title' => t('Right to be forgotten'),
      '#options' => $this
        ->rtfOptions(),
      '#multiple' => TRUE,
      '#default_value' => array(),
    );
    $form['top row']['empty'] = array(
      '#type' => 'checkbox',
      '#title' => t('Filter out Entities where all fields are not configured'),
      '#default_value' => TRUE,
    );
    $form['bottom row']['submit']['#attributes']['class'] = array();
    $form['bottom row']['reset']['#attributes']['class'] = array();
    $form['#attached']['library'][] = array(
      'system',
      'drupal.collapse',
    );
  }

  /**
   * {@inheritdoc}
   */
  public function list_filter($form_state, $item) {
    if (!empty($form_state['values']['gdpr_entity']) && !in_array($item->entity_type, $form_state['values']['gdpr_entity'])) {
      return TRUE;
    }
    if ($form_state['values']['disabled'] != 'all' && $form_state['values']['disabled'] != !empty($item->disabled)) {
      return TRUE;
    }
    if (!empty($form_state['values']['rtf']) && !in_array($item
      ->getSetting('gdpr_fields_rtf', ''), $form_state['values']['rtf'])) {
      return TRUE;
    }
    if (!empty($form_state['values']['rta']) && !in_array($item
      ->getSetting('gdpr_fields_rta', ''), $form_state['values']['rta'])) {
      return TRUE;
    }
    $plugins = $this
      ->getItemEntityPlugins($item, TRUE);
    if (!empty($form_state['values']['empty']) && empty($plugins)) {
      return TRUE;
    }
    if ($form_state['values']['search']) {
      $search = strtolower($form_state['values']['search']);
      foreach ($this
        ->list_search_fields() as $field) {
        if (strpos(strtolower($item->{$field}), $search) !== FALSE) {
          $hit = TRUE;
          break;
        }
      }
      if (empty($hit)) {
        return TRUE;
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ctools_export_ui::$name property
ctools_export_ui::$options property
ctools_export_ui::$plugin property
ctools_export_ui::access public function Menu callback to determine if an operation is accessible. 1
ctools_export_ui::add_page public function
ctools_export_ui::build_operations public function Builds the operation links for a specific exportable item.
ctools_export_ui::clone_page public function Main entry point to clone an item.
ctools_export_ui::delete_form_submit public function Deletes exportable items from the database.
ctools_export_ui::delete_page public function Page callback to delete an exportable item.
ctools_export_ui::disable_page public function Callback to disable a page.
ctools_export_ui::edit_cache_clear public function Clear the object cache for the currently edited item.
ctools_export_ui::edit_cache_get public function Retrieve the item currently being edited from the object cache.
ctools_export_ui::edit_cache_get_key public function Figure out what the cache key is for this object.
ctools_export_ui::edit_cache_set public function Cache the item currently currently being edited.
ctools_export_ui::edit_cache_set_key public function
ctools_export_ui::edit_execute_form public function Execute the form.
ctools_export_ui::edit_execute_form_standard public function Execute the standard form for editing.
ctools_export_ui::edit_execute_form_wizard public function Execute the wizard for editing.
ctools_export_ui::edit_finish_validate public function Perform a final validation check before allowing the form to be finished.
ctools_export_ui::edit_form public function Provide the actual editing form. 1
ctools_export_ui::edit_form_import public function Import form. Provides simple helptext instructions and textarea for pasting a export definition.
ctools_export_ui::edit_form_import_submit public function Submit callback for import form.
ctools_export_ui::edit_form_import_validate public function Import form validate handler.
ctools_export_ui::edit_form_submit public function Handle the submission of the edit form. 2
ctools_export_ui::edit_form_validate public function Validate callback for the edit form.
ctools_export_ui::edit_page public function Main entry point to edit an item.
ctools_export_ui::edit_save_form public function Called to save the final product from the edit form.
ctools_export_ui::edit_wizard_back public function Wizard 'back' callback when using a wizard to edit an item.
ctools_export_ui::edit_wizard_cancel public function Wizard 'cancel' callback when using a wizard to edit an item.
ctools_export_ui::edit_wizard_finish public function Wizard 'cancel' callback when using a wizard to edit an item. 1
ctools_export_ui::edit_wizard_next public function Wizard 'next' callback when using a wizard to edit an item. 1
ctools_export_ui::enable_page public function Callback to enable a page.
ctools_export_ui::export_page public function Page callback to display export information for an exportable item.
ctools_export_ui::get_page_title public function Get a page title for the current page from our plugin strings.
ctools_export_ui::get_wizard_info public function Get the form info for the wizard. 1
ctools_export_ui::import_page public function Page callback to import information for an exportable item.
ctools_export_ui::init public function Fake constructor -- this is easier to deal with than the real constructor because we are retaining PHP4 compatibility, which would require all child classes to implement their own constructor. 1
ctools_export_ui::list_css public function Add listing CSS to the page.
ctools_export_ui::list_footer public function Render a footer to go after thie list.
ctools_export_ui::list_form_submit public function Submit the filter/sort form.
ctools_export_ui::list_form_validate public function Validate the filter/sort form.
ctools_export_ui::list_header public function Render a header to go before the list.
ctools_export_ui::list_page public function Master entry point for handling a list.
ctools_export_ui::list_search_fields public function Provide a list of fields to test against for the default "search" widget. 1
ctools_export_ui::load_item public function Called by ctools_export_ui_load to load the item.
ctools_export_ui::redirect public function Perform a drupal_goto() to the location provided by the plugin for the operation.
ctools_export_ui::set_item_state public function Set an item's state to enabled or disabled and output to user.
gdpr_fields_ui::$entityPlugins protected property
gdpr_fields_ui::$items protected property
gdpr_fields_ui::$rows protected property
gdpr_fields_ui::getItemEntityPlugins protected function Gets all plugins for the same entity type as the one provided.
gdpr_fields_ui::hook_menu public function hook_menu() entry point. Overrides ctools_export_ui::hook_menu
gdpr_fields_ui::list_build_row public function Build a row based on the item. Overrides ctools_export_ui::list_build_row
gdpr_fields_ui::list_filter public function Determine if a row should be filtered out. Overrides ctools_export_ui::list_filter
gdpr_fields_ui::list_form public function Create the filter/sort form at the top of a list of exports. Overrides ctools_export_ui::list_form
gdpr_fields_ui::list_render public function Render all of the rows together. Overrides ctools_export_ui::list_render
gdpr_fields_ui::list_sort_options public function Provide a list of sort options. Overrides ctools_export_ui::list_sort_options
gdpr_fields_ui::list_table_header public function Provide the table header. Overrides ctools_export_ui::list_table_header
gdpr_fields_ui::rtaOptions protected function Get the options array for right to access field.
gdpr_fields_ui::rtfOptions protected function Get the options array for right to be forgotten field.