function RulesPluginUI::buildContent

Implements RulesPluginUIInterface.

Shows a preview of the configuration settings.

Overrides RulesPluginUIInterface::buildContent

1 call to RulesPluginUI::buildContent()
RulesContainerPluginUI::buildContent in ui/ui.core.inc
Implements RulesPluginUIInterface.
1 method overrides RulesPluginUI::buildContent()
RulesContainerPluginUI::buildContent in ui/ui.core.inc
Implements RulesPluginUIInterface.

File

ui/ui.core.inc, line 740

Class

RulesPluginUI
Faces UI extender for all kind of Rules plugins.

Code

public function buildContent() {
    $config_name = $this->element
        ->root()->name;
    $content['label'] = array(
        '#type' => 'link',
        '#title' => $this->element
            ->label(),
        '#href' => $this->element
            ->isRoot() ? RulesPluginUI::path($config_name) : RulesPluginUI::path($config_name, 'edit', $this->element),
        '#prefix' => '<div class="rules-element-label">',
        '#suffix' => '</div>',
    );
    // Put the elements below in a "description" div.
    $content['description'] = array(
        '#prefix' => '<div class="description">',
    );
    $content['description']['parameter'] = array(
        '#caption' => t('Parameter'),
        '#theme' => 'rules_content_group',
    );
    foreach ($this->element
        ->pluginParameterInfo() as $name => $parameter) {
        $element = array();
        if (!empty($this->element->settings[$name . ':select'])) {
            $element['content'] = array(
                '#markup' => '[' . $this->element->settings[$name . ':select'] . ']',
            );
        }
        elseif (isset($this->element->settings[$name])) {
            $class = $this->getDataTypeClass($parameter['type'], $parameter);
            $method = empty($parameter['options list']) ? 'render' : 'renderOptionsLabel';
            // We cannot use method_exists() here as it would trigger a PHP bug.
            // @see https://www.drupal.org/node/1258284
            $element = call_user_func(array(
                $class,
                $method,
            ), $this->element->settings[$name], $name, $parameter, $this->element);
        }
        // Only add parameters that are really configured / not default.
        if ($element) {
            $content['description']['parameter'][$name] = array(
                '#theme' => 'rules_parameter_configuration',
                '#info' => $parameter,
            ) + $element;
        }
    }
    foreach ($this->element
        ->providesVariables() as $name => $var_info) {
        $content['description']['provides'][$name] = array(
            '#theme' => 'rules_variable_view',
            '#info' => $var_info,
            '#name' => $name,
        );
    }
    if (!empty($content['description']['provides'])) {
        $content['description']['provides'] += array(
            '#caption' => t('Provides variables'),
            '#theme' => 'rules_content_group',
        );
    }
    // Add integrity exception messages if there are any for this element.
    try {
        $this->element
            ->integrityCheck();
        // A configuration is still marked as dirty, but already works again.
        if (!empty($this->element->dirty)) {
            rules_config_update_dirty_flag($this->element);
            $variables = array(
                '%label' => $this->element
                    ->label(),
                '%name' => $this->element->name,
                '@plugin' => $this->element
                    ->plugin(),
            );
            drupal_set_message(t('The @plugin %label (%name) was marked dirty, but passes the integrity check now and is active again.', $variables));
            rules_clear_cache();
        }
    } catch (RulesIntegrityException $e) {
        $content['description']['integrity'] = array(
            '#theme' => 'rules_content_group',
            '#caption' => t('Error'),
            '#attributes' => array(
                'class' => array(
                    'rules-content-group-integrity-error',
                ),
            ),
            'error' => array(
                '#markup' => filter_xss($e->getMessage()),
            ),
        );
        // Also make sure the rule is marked as dirty.
        if (empty($this->element->dirty)) {
            rules_config_update_dirty_flag($this->element);
            rules_clear_cache();
        }
    }
    $content['#suffix'] = '</div>';
    $content['#type'] = 'container';
    $content['#attributes']['class'][] = 'rules-element-content';
    return $content;
}