View source
<?php
define('ENTITY_RULES_DEFAULT_TYPES', 'user,node,taxonomy_term');
define('ENTITY_RULES_DEFAULT_PERMISSIONS', 'none');
function entity_rules_entity_info() {
$return = array();
$return['entity_rule_setting'] = array(
'label' => t('Entity Rule Setting'),
'entity class' => 'Entity',
'controller class' => 'EntityAPIControllerExportable',
'base table' => 'entity_rule_setting',
'fieldable' => FALSE,
'exportable' => TRUE,
'entity keys' => array(
'id' => 'id',
),
'bundles' => array(
'entity_rule_setting' => array(
'label' => t('Entity Rules Setting'),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full content'),
'custom settings' => FALSE,
),
),
'module' => 'entity_rules',
'metadata controller class' => 'EntityDefaultMetadataController',
);
return $return;
}
function entity_rules_menu() {
$items = array();
$items['admin/config/workflow/entity_rules/settings'] = array(
'title' => 'Settings',
'description' => '',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'entity_rules_admin_form',
),
'access arguments' => array(
'administer rules',
),
'file' => 'entity_rules.admin.inc',
'type' => MENU_LOCAL_TASK,
'weight' => 1000,
);
$rule_types = _entity_rules_get_rule_types();
$first_rule_type = TRUE;
foreach ($rule_types as $op => $rule_type) {
$controller = new RulesUIController();
$rule_path = 'admin/config/workflow/entity_rules' . "/{$op}";
$items += $controller
->config_menu($rule_path);
$items[$rule_path] = array(
'title' => $rule_type['label'] . ' ' . t('Rules'),
'description' => empty($rule_type['description']) ? '' : $rule_type['description'],
'page callback' => 'entity_rules_list',
'page arguments' => array(
$op,
),
'access arguments' => array(
'administer rules',
),
'file path' => drupal_get_path('module', 'entity_rules'),
'file' => 'entity_rules.admin.inc',
'type' => MENU_LOCAL_TASK,
);
if ($first_rule_type) {
$items['admin/config/workflow/entity_rules'] = $items[$rule_path];
$items[$rule_path]['type'] = MENU_DEFAULT_LOCAL_TASK;
$items['admin/config/workflow/entity_rules']['type'] = MENU_NORMAL_ITEM;
$items['admin/config/workflow/entity_rules']['title'] = 'Entity Rules';
$items['admin/config/workflow/entity_rules']['description'] = 'Manage Rule components available for Entity Rules';
$first_rule_type = FALSE;
}
$items["{$rule_path}/add"] = array(
'title' => 'Add a @op rule',
'title arguments' => array(
'@op' => $rule_type['label'],
),
'description' => "Adds an additional {$rule_type['label']} rule configuration.",
'page callback' => 'drupal_get_form',
'page arguments' => array(
"entity_rules_add_rule_form",
$rule_path,
),
'access arguments' => array(
'administer rules',
),
'file path' => drupal_get_path('module', 'rules_admin'),
'file' => 'rules_admin.inc',
'type' => MENU_LOCAL_ACTION,
);
$items["{$rule_path}/manage/%rules_config"]['page arguments'][0] = 'entity_rules_form_edit_rules_config';
$items["{$rule_path}/manage/%rules_config/clone"]['page arguments'][0] = 'entity_rules_form_clone_rules_config';
}
$permissions = variable_get('entity_rules_permissions', ENTITY_RULES_DEFAULT_PERMISSIONS);
$enabled_types = variable_get('entity_rules_types', explode(',', ENTITY_RULES_DEFAULT_TYPES));
$entity_infos = entity_get_info();
$entity_infos = array_intersect_key($entity_infos, array_flip($enabled_types));
$items["admin/config/workflow/entity-rules-triggers"] = array(
'title' => 'Entity Rules - Triggers',
'type' => MENU_NORMAL_ITEM,
'file' => 'entity_rules.admin.inc',
'page callback' => 'entity_rules_entity_type_list',
'access callback' => 'entity_rules_overview_access',
'weight' => 10,
);
foreach ($entity_infos as $entity_type => $entity_info) {
if ($entity_info['fieldable']) {
foreach ($entity_info['bundles'] as $bundle_name => $bundle_info) {
if (isset($bundle_info['admin'])) {
$rule_types = _entity_rules_get_rule_types($entity_type);
$path = $bundle_info['admin']['path'];
if (isset($bundle_info['admin']['bundle argument'])) {
$bundle_arg = $bundle_info['admin']['bundle argument'];
}
else {
$bundle_arg = $bundle_name;
}
$rule_type_position = count(explode('/', $path)) + 1;
$access = _entity_rules_menu_access_settings($entity_type, $bundle_name, $bundle_info);
$weight = 10;
foreach ($rule_types as $op => $rule_type) {
if ($weight == 10) {
$menu_type = MENU_DEFAULT_LOCAL_TASK;
$items["{$path}/entity-rules"] = array(
'title' => 'Rules',
'type' => MENU_LOCAL_TASK,
'file' => 'entity_rules.admin.inc',
'page callback' => 'entity_rules_type_op_rules',
'page arguments' => array(
$op,
$entity_type,
$bundle_arg,
),
'weight' => 10,
) + $access;
if ($entity_type == 'comment') {
$items["{$path}/entity-rules"]['title'] = 'Comment Rules';
}
}
else {
$menu_type = MENU_LOCAL_TASK;
}
$items["{$path}/entity-rules/{$op}"] = array(
'title' => '@op Rules',
'title arguments' => array(
'@op' => $rule_type['label'],
),
'page callback' => 'entity_rules_type_op_rules',
'page arguments' => array(
$op,
$entity_type,
$bundle_arg,
),
'type' => $menu_type,
'file' => 'entity_rules.admin.inc',
'weight' => $weight++,
) + $access;
$rule_position = (int) $rule_type_position + 1;
$items["{$path}/entity-rules-remove/{$op}/%"] = array(
'title' => '@op Rules',
'title arguments' => array(
'@op' => $rule_type['label'],
),
'page callback' => 'entity_rules_type_op_rules_remove',
'page arguments' => array(
$op,
$entity_type,
$bundle_arg,
$rule_position,
),
'type' => MENU_CALLBACK,
'file' => 'entity_rules.admin.inc',
'weight' => $weight++,
) + $access;
if ($permissions != 'none') {
$other_menu_item = $items["{$path}/entity-rules/{$op}"];
if ($op == 'create') {
$other_menu_item['type'] = MENU_DEFAULT_LOCAL_TASK;
}
else {
$other_menu_item['type'] = MENU_LOCAL_TASK;
}
$other_menu_item['page arguments'] = array(
$op,
$entity_type,
$bundle_name,
);
$items["admin/config/workflow/entity-rules-triggers/{$entity_type}-{$bundle_name}/{$op}"] = $other_menu_item;
$other_menu_item = $items["{$path}/entity-rules-remove/{$op}/%"];
$other_menu_item['page arguments'] = array(
$op,
$entity_type,
$bundle_name,
6,
);
$items["admin/config/workflow/entity-rules-remove-triggers/{$entity_type}-{$bundle_name}/{$op}"] = $other_menu_item;
}
}
if ($permissions != 'none') {
$other_menu_item = $items["{$path}/entity-rules"];
$other_menu_item['type'] = MENU_NORMAL_ITEM;
$other_menu_item['title'] = $entity_info['label'] . ' - ' . $bundle_info['label'];
$other_menu_item['page arguments'] = array(
'create',
$entity_type,
$bundle_name,
);
$items["admin/config/workflow/entity-rules-triggers/{$entity_type}-{$bundle_name}"] = $other_menu_item;
}
}
}
}
}
return $items;
}
function entity_rules_overview_access() {
$permission = variable_get('entity_rules_permissions', ENTITY_RULES_DEFAULT_PERMISSIONS);
$enabled_types = variable_get('entity_rules_types', explode(',', ENTITY_RULES_DEFAULT_TYPES));
if ($permission == 'none') {
return FALSE;
}
if ($permission == 'single') {
return user_access('administer entity_rules settings');
}
if ($permission == 'entity_type') {
$entity_infos = entity_get_info();
$entity_infos = array_intersect_key($entity_infos, array_flip($enabled_types));
foreach ($entity_infos as $entity_type => $entity_info) {
if (user_access("administer {$entity_type} entity_rules settings")) {
return TRUE;
}
}
}
return FALSE;
}
function _entity_rules_menu_access_settings($entity_type, $bundle_name, $bundle_info) {
$permission = variable_get('entity_rules_permissions', ENTITY_RULES_DEFAULT_PERMISSIONS);
if ($permission == 'none') {
$access = array_intersect_key($bundle_info['admin'], drupal_map_assoc(array(
'access callback',
'access arguments',
)));
$access += array(
'access callback' => 'user_access',
'access arguments' => array(
'administer site configuration',
),
);
}
if ($permission == 'single') {
$access = array(
'access callback' => 'user_access',
'access arguments' => array(
'administer entity_rules settings',
),
);
}
if ($permission == 'entity_type') {
$access = array(
'access callback' => 'user_access',
'access arguments' => array(
"administer {$entity_type} entity_rules settings",
),
);
}
return $access;
}
function _entity_rules_get_rule_types($entity_type = NULL) {
$possible_types = array(
'create',
'update',
'delete',
'validation',
'form_access',
);
$rule_types = module_invoke_all('entity_rules_event_info');
$entity_type_settings = _entity_rules_get_type_settings();
if (!empty($entity_type)) {
if (!isset($entity_type_settings[$entity_type])) {
return array();
}
if (isset($entity_type_settings[$entity_type]['ops'])) {
$rule_types = array_intersect_key($rule_types, array_flip($entity_type_settings[$entity_type]['ops']));
}
else {
foreach ($rule_types as $event => $info) {
if ($info['needs_form']) {
if (empty($entity_type_settings[$entity_type]['forms'])) {
unset($rule_types[$event]);
continue;
}
}
if (isset($info['entity_types']) && !in_array($entity_type, $info['entity_types'])) {
unset($rule_types[$event]);
}
}
}
}
else {
$found_type_supports_forms = FALSE;
foreach ($entity_type_settings as $entity_type_setting) {
if (!empty($entity_type_setting['forms'])) {
$found_type_supports_forms = TRUE;
}
}
if (!$found_type_supports_forms) {
foreach (array_keys($rule_types) as $rule_type) {
if (!empty($rule_type_info['needs_form'])) {
unset($rule_types[$rule_type]);
}
}
}
}
return $rule_types;
}
function entity_rules_entity_rules_event_info() {
$crud_rule_vars[] = array(
'type' => 'boolean',
'label' => 'Continue Rules',
'name' => 'continue',
'usage' => '11',
'weight' => 1,
'description' => t('If set to FALSE no rules after the current will be invoked.'),
'entity_rules_settings' => array(
'default_value' => TRUE,
),
);
$defaults = array(
'needs_form' => FALSE,
'component_types' => array(
'rule',
'rule set',
),
);
return array(
'create' => array(
'label' => t('Create'),
'vars' => $crud_rule_vars,
) + $defaults,
'update' => array(
'label' => t('Update'),
'vars' => $crud_rule_vars,
) + $defaults,
'delete' => array(
'label' => t('Delete'),
'vars' => $crud_rule_vars,
) + $defaults,
'validation' => array(
'label' => t('Validation'),
'needs_form' => TRUE,
'component_types' => array(
'rule',
'rule set',
'and',
'or',
),
'vars' => array(
array(
'type' => 'boolean',
'label' => 'Entity Validates',
'name' => 'entity_is_validate',
'usage' => '11',
'weight' => 1,
'description' => t('If set to FALSE the entity fails validation.'),
'entity_rules_settings' => array(
'default_value' => TRUE,
),
),
),
) + $defaults,
'form_access' => array(
'label' => t('Form Access'),
'needs_form' => TRUE,
'component_types' => array(
'rule',
'rule set',
'and',
'or',
),
'vars' => array(
array(
'type' => 'boolean',
'label' => 'Entity Form Access',
'name' => 'entity_form_acccess',
'usage' => '11',
'weight' => 1,
'description' => t('If set to FALSE then form will not be shown to the user.'),
'entity_rules_settings' => array(
'default_value' => TRUE,
),
),
),
) + $defaults,
);
}
function entity_rules_clear_type_settings() {
_entity_rules_get_type_settings(NULL, TRUE);
variable_set('menu_rebuild_needed', TRUE);
}
function _entity_rules_get_type_settings($entity_type = NULL, $reset = FALSE) {
$all_type_settings =& drupal_static(__FUNCTION__);
if ($reset) {
unset($all_type_settings);
cache_clear_all('entity_rules_type_settings', 'cache');
}
if (!isset($all_type_settings)) {
if ($cache = cache_get('entity_rules_type_settings')) {
$all_type_settings = $cache->data;
}
else {
$all_type_settings = module_invoke_all('entity_rules_info');
$site_entity_types = array_keys(entity_get_info());
$enabled_types = variable_get('entity_rules_types', explode(',', ENTITY_RULES_DEFAULT_TYPES));
$all_type_settings = array_intersect_key($all_type_settings, array_flip($enabled_types));
$default_settings = array(
'form_settings' => array(
'exclude_validation_ops' => array(
'delete',
),
),
);
$enabled_types = array_filter($enabled_types);
foreach ($enabled_types as $entity_type => $entity_type_info) {
if (in_array($entity_type, $site_entity_types)) {
if (isset($all_type_settings[$entity_type])) {
$all_type_settings[$entity_type] += $default_settings;
}
else {
$all_type_settings[$entity_type] = $default_settings;
}
}
}
cache_set('entity_rules_type_settings', $all_type_settings, 'cache');
}
}
if (empty($entity_type)) {
return $all_type_settings;
}
else {
return $all_type_settings[$entity_type];
}
}
function entity_rules_entity_rules_info() {
$entity_infos = entity_get_info();
$type_info = array(
'taxonomy_term' => array(
'forms' => array(
'taxonomy_form_term',
),
),
'user' => array(
'forms' => array(
'user_register_form',
'user_profile_form',
),
),
'comment' => array(
'forms' => array(
'comment_form',
),
),
);
$type_info['node']['forms'] = array(
'node_form',
);
$type_info['field_collection_item'] = array(
'forms' => array(
'field_collection_item_form',
),
);
$enabled_types = array();
foreach ($type_info as $entity_type => $entity_info) {
if (isset($entity_infos[$entity_type])) {
$enabled_types[$entity_type] = $type_info[$entity_type];
}
}
return $enabled_types;
}
function _entity_rules_get_form_entity_type_settings($form_state) {
$form_id = $form_state['build_info']['form_id'];
if (!empty($form_state['build_info']['base_form_id'])) {
$base_form_id = $form_state['build_info']['base_form_id'];
}
$type_settings = _entity_rules_get_type_settings();
foreach ($type_settings as $entity_type => $settings) {
if (isset($settings['forms']) && is_array($settings['forms'])) {
if (in_array($form_id, $settings['forms']) || isset($base_form_id) && in_array($base_form_id, $settings['forms'])) {
return array_merge(array(
'entity_type' => $entity_type,
), $settings['form_settings']);
}
}
}
return FALSE;
}
function entity_rules_form_alter(&$form, &$form_state, $form_id) {
if (!empty($form['#entity_type']) && !empty($form['#bundle'])) {
$bundle_name = $form['#bundle'];
$entity_type = NULL;
if ($form_settings = _entity_rules_get_form_entity_type_settings($form_state)) {
if ($rule_settings = entity_rules_load_settings_for_op($form_settings['entity_type'], $bundle_name, 'form_access')) {
$entity_type = $form_settings['entity_type'];
if (isset($form['#' . $entity_type]) || isset($form['#entity'])) {
$entity = isset($form['#' . $entity_type]) ? $form['#' . $entity_type] : $form['#entity'];
$results = _entity_rules_invoke_rules($entity, $entity_type, 'form_access');
if (!_entity_rules_all_pass($results)) {
$form['#access'] = FALSE;
}
}
}
if ($rule_settings = entity_rules_load_settings_for_op($form_settings['entity_type'], $bundle_name, 'validation')) {
$form['#validate'][] = 'entity_rules_entity_form_validation';
}
}
}
}
function entity_rules_entity_form_validation(&$form, &$form_state) {
$entity_type = $form['#entity_type'];
if ($ui_controller = entity_ui_controller($entity_type)) {
$entity = $ui_controller
->entityFormSubmitBuildEntity($form, $form_state);
}
else {
$bundle = $form['#bundle'];
$entity = entity_rules_build_form_entity($form, $form_state, $entity_type, $bundle);
}
$results = _entity_rules_invoke_rules($entity, $entity_type, 'validation');
if (!_entity_rules_all_pass($results)) {
form_error($form['actions']);
}
}
function entity_rules_build_form_entity($form, $form_state, $entity_type, $bundle) {
if (!empty($bundle) && isset($form_state['values'][$bundle])) {
$form_state[$entity_type]->{$bundle} = $form_state['values'][$bundle];
}
entity_form_submit_build_entity($entity_type, $form_state[$entity_type], $form, $form_state);
return $form_state[$entity_type];
}
function _entity_rules_all_pass($rule_returns) {
if (empty($rule_returns)) {
return TRUE;
}
foreach ($rule_returns as $rule_return) {
if ($rule_return === FALSE) {
return FALSE;
}
if (is_array($rule_return)) {
if (isset($rule_return[0]) && $rule_return[0] == FALSE) {
return FALSE;
}
}
}
return TRUE;
}
function entity_rules_forms() {
$forms["entity_rules_add_rule_form"] = array(
'callback' => 'rules_admin_add_component',
);
$forms["entity_rules_form_edit_rules_config"] = array(
'callback' => 'rules_ui_form_edit_rules_config',
);
$forms["entity_rules_form_clone_rules_config"] = array(
'callback' => 'rules_ui_form_clone_rules_config',
);
return $forms;
}
function _entity_rules_get_component_types_for_op($op) {
$events = module_invoke_all('entity_rules_event_info');
return $events[$op]['component_types'];
}
function _entity_rules_add_rules_component_alter(&$form, $op, $is_conditional) {
$component_types = _entity_rules_get_component_types_for_op($op);
if ($component_types && !empty($form['plugin_name']['#options'])) {
foreach ($form['plugin_name']['#options'] as $key => $value) {
if (!in_array($key, $component_types)) {
unset($form['plugin_name']['#options'][$key]);
}
}
}
if (isset($form['settings']) && empty($form['#entity_rules_altered'])) {
$form['#entity_rules_altered'] = TRUE;
$form['settings']['tags'] = array(
'#type' => 'value',
'#value' => "entity_rules_{$op}",
);
$default_var_items[] = array(
'type' => 'entity',
'label' => 'Entity',
'name' => 'entity',
'usage' => '10',
'weight' => 0,
);
$var_items = array_merge($default_var_items, _entity_rules_get_var_items($op, $is_conditional));
$item_keys = array();
foreach ($var_items as $var_num => $var_item) {
if (!isset($form['settings']['vars']['items'][$var_item['name']])) {
$item_key = $var_num;
}
else {
$item_key = $var_item['name'];
}
$item_keys[] = $item_key;
if (isset($var_item['description'])) {
$form['settings']['vars']['items'][$item_key]['type']['#description'] = $var_item['description'];
}
foreach ($var_item as $prop => $value) {
if ($prop == 'entity_rules_settings') {
continue;
}
if ($prop == 'weight' || $prop == 'usage' || empty($form['settings']['vars']['items'][$item_key][$prop]['#default_value'])) {
$form['settings']['vars']['items'][$item_key][$prop]['#default_value'] = $value;
}
$form['settings']['vars']['items'][$item_key][$prop]['#disabled'] = TRUE;
}
if ($var_item['type'] == 'entity') {
$entity_types = entity_get_info();
$entity_options['entity'] = t('Any Entity');
foreach ($entity_types as $entity_type => $info) {
if ($info['fieldable']) {
if (in_array($op, array_keys(_entity_rules_get_rule_types($entity_type)))) {
$entity_options[$entity_type] = $info['label'];
}
}
}
if (count($entity_options) == 2) {
unset($entity_options['entity']);
}
$form['settings']['vars']['items'][$item_key]['type']['#disabled'] = FALSE;
$form['settings']['vars']['items'][$item_key]['type']['#options'] = $entity_options;
$form['settings']['vars']['items'][$item_key]['type']['#description'] = t('Choose which entity type this Rule should be availabe for.');
}
}
$text_field_var_types = array(
'date',
'integer',
'decimal',
'boolean',
'text',
);
foreach ($form['settings']['vars']['items'] as $item_key => &$var_item) {
if (!in_array($item_key, $item_keys, TRUE)) {
$var_item['type']['#description'] = t('If set this variable will availalbe to set per bundle to pass to this Rule.');
foreach ($var_item['type']['#options'] as $type => $value) {
if (!in_array($type, $text_field_var_types)) {
unset($var_item['type']['#options'][$type]);
}
}
}
}
}
}
function entity_rules_form_entity_rules_add_rule_form_alter(&$form, $form_state, $form_id) {
$op = arg(4);
$is_conditional = in_array($form['plugin_name']['#default_value'], array(
'and',
'or',
));
_entity_rules_add_rules_component_alter($form, $op, $is_conditional);
}
function entity_rules_form_entity_rules_form_edit_rules_config_alter(&$form, $form_state, $form_id) {
$op = arg(4);
$rule = $form_state['rules_element'];
$is_conditional = is_subclass_of($rule, 'RulesConditionContainer');
_entity_rules_add_rules_component_alter($form, $op, $is_conditional);
}
function entity_rules_form_entity_rules_form_clone_rules_config_alter(&$form, $form_state, $form_id) {
$op = arg(4);
$rule = $form_state['rules_element'];
$is_conditional = is_subclass_of($rule, 'RulesConditionContainer');
_entity_rules_add_rules_component_alter($form, $op, $is_conditional);
}
function _entity_rules_get_var_items($op, $is_conditional) {
$var_items = array();
$events = module_invoke_all('entity_rules_event_info');
if ($is_conditional && !empty($events[$op]['conditional vars'])) {
$var_items += $events[$op]['conditional vars'];
}
elseif (!$is_conditional && !empty($events[$op]['vars'])) {
$var_items += $events[$op]['vars'];
}
return $var_items;
}
function _entity_rules_get_bundle_name($entity_type, $bundle) {
if (is_object($bundle)) {
$entity_info = entity_get_info($entity_type);
return $bundle->{$entity_info['bundle keys']['bundle']};
}
else {
return $bundle;
}
}
function entity_rules_entity_delete($entity, $type) {
_entity_rules_invoke_rules($entity, $type, 'delete');
}
function entity_rules_entity_insert($entity, $type) {
_entity_rules_invoke_rules($entity, $type, 'create');
}
function entity_rules_entity_update($entity, $type) {
_entity_rules_invoke_rules($entity, $type, 'update');
}
function _entity_rules_invoke_rules($entity, $entity_type, $op) {
$return_values = array();
$ids = entity_extract_ids($entity_type, $entity);
$bundle = array_pop($ids);
$rule_settings = entity_rules_load_settings_for_op($entity_type, $bundle, $op, TRUE);
foreach ($rule_settings as $invoke_settings) {
$rule_name = $invoke_settings->loaded_rules_config->name;
if (rules_get_cache('comp_' . $rule_name)) {
$entity_wrapper = entity_metadata_wrapper($entity_type, $entity);
$args = array(
$entity_wrapper,
);
$conditional = is_subclass_of($invoke_settings->loaded_rules_config, 'RulesConditionContainer');
$default_rule_args = _entity_rules_get_var_items($op, $conditional);
foreach ($default_rule_args as $default_rule_arg) {
$args[] = $default_rule_arg['entity_rules_settings']['default_value'];
}
$vars = _entity_rules_get_extra_vars($invoke_settings->loaded_rules_config, $op);
foreach ($vars as $var_name => $var_info) {
if (isset($invoke_settings->args[$var_name])) {
$args[] = $invoke_settings->args[$var_name];
}
else {
$args[] = NULL;
}
}
$return_value = entity_rules_invoke_component($rule_name, $args);
if (is_subclass_of($invoke_settings->loaded_rules_config, 'RulesConditionContainer')) {
if ($return_value === FALSE && !empty($invoke_settings->false_msg['value'])) {
_entity_rules_show_message($invoke_settings->false_msg, $entity, $entity_type);
}
}
$return_values[] = $return_value;
if ($return_value === FALSE || is_array($return_value) && isset($return_value[0]) && $return_value[0] == FALSE) {
break;
}
}
else {
$msg = t('Entityform Type %form references non-existing Rule component %component', array(
'%form' => $entityform->type,
'%component' => $rule_name,
));
watchdog('entityform', $msg);
if (user_access('administer entityform types')) {
drupal_set_message($msg, 'warning');
}
}
}
return $return_values;
}
function _entity_rules_show_message($text_value, $entity, $entity_type, $message_type = 'warning') {
$is_filtered = FALSE;
if (is_array($text_value)) {
$text = $text_value['value'];
$format = $text_value['format'];
$is_filtered = TRUE;
}
else {
$text = check_plain($text_value);
}
if ($text == '<none>') {
return '';
}
$token_types[] = 'global';
$token_types[$entity_type] = $entity;
$text = token_replace($text, $token_types);
if ($is_filtered) {
$text = check_markup($text, $format);
}
if ($text) {
drupal_set_message($text, $message_type);
}
}
function entity_rules_invoke_component($name, &$args) {
if ($component = rules_get_cache('comp_' . $name)) {
return $component
->executeByArgs($args);
}
return FALSE;
}
function _entity_rules_get_extra_vars($rule, $op) {
$vars = $rule
->componentVariables();
unset($vars['entity']);
$is_conditional = is_subclass_of($rule, 'RulesConditionContainer');
$default_var_items = _entity_rules_get_var_items($op, $is_conditional);
foreach ($default_var_items as $default_var) {
unset($vars[$default_var['name']]);
}
return $vars;
}
function entity_rules_theme() {
return array(
'entity_rules_bundle_rules_form' => array(
'render element' => 'form',
'file' => 'entity_rules.admin.inc',
),
);
}
function entity_rules_load_settings_for_op($entity_type, $bundle, $op, $load_rules = FALSE) {
$enabled_types = variable_get('entity_rules_types', explode(',', ENTITY_RULES_DEFAULT_TYPES));
if (array_search($entity_type, $enabled_types, TRUE) === FALSE) {
return array();
}
$conditions = array(
'entity_type' => $entity_type,
'bundle' => $bundle,
'op' => $op,
);
$entities = entity_load('entity_rule_setting', FALSE, $conditions);
if ($load_rules) {
foreach (array_keys($entities) as $entity_id) {
$entities[$entity_id]->loaded_rules_config = rules_config_load($entities[$entity_id]->rules_config);
if (empty($entities[$entity_id]->loaded_rules_config)) {
unset($entities[$entity_id]);
}
}
}
return $entities;
}
function entity_rules_permission() {
$return = array();
$permissions = variable_get('entity_rules_permissions', ENTITY_RULES_DEFAULT_PERMISSIONS);
$enabled_types = variable_get('entity_rules_types', explode(',', ENTITY_RULES_DEFAULT_TYPES));
switch ($permissions) {
case 'single':
$return = array(
'administer entity_rules settings' => array(
'title' => t('Administer Entity Rules'),
),
);
break;
case 'entity_type':
$entity_infos = entity_get_info();
$entity_infos = array_intersect_key($entity_infos, array_flip($enabled_types));
foreach ($entity_infos as $entity_type => $info) {
if ($info['fieldable']) {
$return["administer {$entity_type} entity_rules settings"] = array(
'title' => t('%entity_type Administer Entity Rules', array(
'%entity_type' => $info['label'],
)),
);
}
}
break;
}
return $return;
}