You are here

protected function RulesPlugin::checkParameterSettings in Rules 7.2

Checks whether parameters are correctly configured.

1 call to RulesPlugin::checkParameterSettings()
RulesPlugin::integrityCheck in includes/rules.core.inc
Makes sure the plugin is configured right.

File

includes/rules.core.inc, line 912
Rules base classes and interfaces needed for any rule evaluation.

Class

RulesPlugin
Base class for rules plugins.

Code

protected function checkParameterSettings() {
  foreach ($this
    ->pluginParameterInfo() as $name => $info) {
    if (isset($info['restriction']) && $info['restriction'] == 'selector' && isset($this->settings[$name])) {
      throw new RulesIntegrityException(t("The parameter %name may only be configured using a selector.", array(
        '%name' => $name,
      )), array(
        $this,
        'parameter',
        $name,
      ));
    }
    elseif (isset($info['restriction']) && $info['restriction'] == 'input' && isset($this->settings[$name . ':select'])) {
      throw new RulesIntegrityException(t("The parameter %name may not be configured using a selector.", array(
        '%name' => $name,
      )), array(
        $this,
        'parameter',
        $name,
      ));
    }
    elseif (!empty($this->settings[$name . ':select']) && !$this
      ->applyDataSelector($this->settings[$name . ':select'])) {
      throw new RulesIntegrityException(t("Data selector %selector for parameter %name is invalid.", array(
        '%selector' => $this->settings[$name . ':select'],
        '%name' => $name,
      )), array(
        $this,
        'parameter',
        $name,
      ));
    }
    elseif ($arg_info = $this
      ->getArgumentInfo($name)) {

      // If we have enough metadata, check whether the types match.
      if (!RulesData::typesMatch($arg_info, $info)) {
        throw new RulesIntegrityException(t("The data type of the configured argument does not match the parameter's %name requirement.", array(
          '%name' => $name,
        )), array(
          $this,
          'parameter',
          $name,
        ));
      }
    }
    elseif (!$this
      ->isRoot() && !isset($this->settings[$name]) && empty($info['optional']) && $info['type'] != 'hidden') {
      throw new RulesIntegrityException(t('Missing configuration for parameter %name.', array(
        '%name' => $name,
      )), array(
        $this,
        'parameter',
        $name,
      ));
    }

    // @todo Make sure used values are allowed.
    // (key/value pairs + allowed values).
  }
}