Projet

Général

Profil

Paste
Télécharger (24,6 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / rules / includes / rules.upgrade.inc @ 76e2e7c3

1
<?php
2

    
3
/**
4
 * @file
5
 * Contains code for upgrading rule configurations from 6.x-1.x to 7.x-2.x.
6
 */
7

    
8
/**
9
 * Form builder for the upgrade page.
10
 */
11
function rules_upgrade_form($form, &$form_state) {
12

    
13
  if (!empty($form_state['export'])) {
14
    foreach ($form_state['export'] as $key => $export) {
15
      // Rules have been already converted and exported, so show the export.
16
      $form['export'][$key] = array(
17
        '#type' => 'textarea',
18
        '#title' => t('Export %name', array('%name' => $key)),
19
        '#description' => t('For importing copy the content of the text area and paste it into the import page of the Rules admin UI. In case the export does not pass the integrity check during import, try using the save to database method instead and manually fix your configuration after conversion.'),
20
        '#rows' => 10,
21
        '#default_value' => $export,
22
      );
23
    }
24
    return $form;
25
  }
26

    
27
  $form['help'] = array(
28
    '#prefix' => '<p>',
29
    '#suffix' => '</p>',
30
    '#markup' => t('This form allows you to convert rules or rule sets from Rules 1.x to Rules 2.x.') . ' ' .
31
      t('In order to convert a rule or rule set make sure you have all dependend modules installed and upgraded, i.e. modules which provide Rules integration that has been used in your rules or rule sets. In addition those modules may need to implement some Rules specific update hooks for the conversion to properly work.') . ' ' .
32
      t('After conversion, the old rules and rule sets will stay in the database until you manually delete them. That way you can make sure the conversion has gone right before you delete the old rules and rule sets.')
33
  );
34

    
35
  $option_rules = $option_sets = array();
36
  if (!db_table_exists('rules_rules')) {
37
    drupal_set_message('There are no Rules 1.x rules or rule sets left to convert.', 'error');
38
  }
39
  else {
40
    foreach (_rules_upgrade_fetch_all_rules() as $name => $rule) {
41
      if (!empty($rule['#set']) && strpos($rule['#set'], 'event_') === 0) {
42
        $option_rules[$name] = $name . ': ' . $rule['#label'];
43
      }
44
    }
45
    $query = db_select('rules_sets', 'r')->fields('r');
46
    foreach ($query->execute() as $row) {
47
      $set = unserialize($row->data);
48
      $option_sets[$row->name] = $row->name . ': ' . $set['label'];
49
    }
50

    
51
    $form['clear'] = array(
52
      '#prefix' => '<p>',
53
      '#suffix' => '</p>',
54
      '#markup' => t('Once you have successfully converted your configuration, you can clean up your database and <a href="!url">delete</a> all Rules 1.x configurations.', array('!url' => url('admin/config/workflow/rules/upgrade/clear')))
55
    );
56
  }
57

    
58
  $form['rules'] = array(
59
    '#type' => 'select',
60
    '#title' => t('Rules'),
61
    '#options' => $option_rules,
62
    '#multiple' => TRUE,
63
  );
64

    
65
  $form['sets'] = array(
66
    '#type' => 'select',
67
    '#title' => t('Rule sets'),
68
    '#options' => $option_sets,
69
    '#multiple' => TRUE,
70
  );
71
  $form['method'] = array(
72
    '#type' => 'radios',
73
    '#title' => t('Method'),
74
    '#options' => array(
75
       'export' => t('Convert configuration and export it.'),
76
       'save' => t('Convert configuration and save it.'),
77
    ),
78
    '#default_value' => 'export',
79
  );
80

    
81
  $form['actions']['convert'] = array(
82
    '#type' => 'submit',
83
    '#value' => t('Convert'),
84
    '#disabled' => !db_table_exists('rules_rules')
85
  );
86
  return $form;
87
}
88

    
89
/**
90
 * Submit handler for the form.
91
 */
92
function rules_upgrade_form_submit($form, &$form_state) {
93
  // Load all rules includes and install files so modules may put there upgrade
94
  // information in both locations.
95
  module_load_all_includes('rules.inc');
96
  module_load_all_includes('install');
97

    
98
  $configs = array();
99

    
100
  try {
101
    foreach ($form_state['values']['rules'] as $name) {
102
      drupal_set_message(t('Converting %plugin %name...', array('%plugin' => t('rule'), '%name' => $name)));
103
      $configs[$name] = rules_upgrade_convert_rule($name, _rules_upgrade_fetch_item($name, 'rules_rules'));
104
    }
105
    foreach ($form_state['values']['sets'] as $name) {
106
      drupal_set_message(t('Converting %plugin %name...', array('%plugin' => t('rule set'), '%name' => $name)));
107
      $configs[$name] = rules_upgrade_convert_rule_set($name, _rules_upgrade_fetch_item($name, 'rules_sets'));
108
    }
109
    drupal_set_message(t('Completed.'));
110

    
111
    if ($form_state['values']['method'] == 'save') {
112
      foreach ($configs as $config) {
113
        $config->save();
114
      }
115
      drupal_set_message(t('Converted configurations have been saved to the database and will appear in the Rules administration interface.'));
116
    }
117
    elseif ($form_state['values']['method'] == 'export') {
118
      $export = array();
119
      foreach ($configs as $name => $config) {
120
        $export[$name] = $config->export();
121
      }
122
      $form_state['export'] = $export;
123
      $form_state['rebuild'] = TRUE;
124
    }
125
  }
126
  catch (RulesException $e) {
127
    drupal_set_message($e->getMessage(), 'error');
128
  }
129
}
130

    
131
/**
132
 * Confirm form for deleting data.
133
 */
134
function rules_upgrade_confirm_clear_form($form, $form_state) {
135
  $confirm_question = t('Are you sure you want to drop the Rules 1.x tables from the database?');
136
  $confirm_question_long = t('Are you sure you want to drop the Rules 1.x tables from the database? All Rules 1.x configurations will be deleted regardless whether they have been already converted.') . ' ' . t('This action cannot be undone.');
137
  return confirm_form($form, $confirm_question, 'admin/config/workflow/rules/upgrade', $confirm_question_long, t('Delete data'), t('Cancel'));
138
}
139

    
140
function rules_upgrade_confirm_clear_form_submit($form, &$form_state) {
141
  db_drop_table('rules_rules');
142
  db_drop_table('rules_sets');
143
  db_drop_table('rules_scheduler_d6');
144
  drupal_set_message(t('Rules 1.x configurations have been deleted.'));
145
  $form_state['redirect'] = 'admin';
146
}
147

    
148
/**
149
 * Fetches a single item (rule | rule set).
150
 */
151
function _rules_upgrade_fetch_item($name, $table) {
152
  $query = db_select($table, 'r')->fields('r')->condition('name', $name);
153
  $row = $query->execute()->fetchAssoc();
154
  return unserialize($row['data']);
155
}
156

    
157
/**
158
 * Fetches all rules.
159
 */
160
function _rules_upgrade_fetch_all_rules() {
161
  $static = drupal_static(__FUNCTION__);
162

    
163
  if (!isset($static)) {
164
    $query = db_select('rules_rules', 'r')->fields('r');
165
    $static['rules'] = array();
166
    foreach ($query->execute() as $row) {
167
      $static['rules'][$row->name] = unserialize($row->data);
168
    }
169
  }
170
  return $static['rules'];
171
}
172

    
173
/**
174
 * Converts a single reaction rule.
175
 */
176
function rules_upgrade_convert_rule($name, $cfg_old) {
177
  $config = rules_upgrade_plugin_factory($cfg_old);
178
  $config->name = $name;
179

    
180
  if ($config instanceof RulesReactionRule) {
181
    rules_upgrade_convert_element($cfg_old, $config);
182
  }
183
  return $config;
184
}
185

    
186
/**
187
 * Converts a single rule set, including all of its rules.
188
 */
189
function rules_upgrade_convert_rule_set($name, $cfg_old) {
190
  $config = rules_plugin_factory('rule set');
191
  $config->name = $name;
192
  foreach (array('label', 'weight') as $key) {
193
    if (isset($cfg_old[$key])) {
194
      $config->$key = $cfg_old[$key];
195
    }
196
  }
197
  if (isset($cfg_old['arguments'])) {
198
    $vars = &$config->componentVariables();
199
    foreach ($cfg_old['arguments'] as $var_name => $info) {
200
      // Map data types as required.
201
      if ($info['type'] == 'string') {
202
        $info['type'] = 'text';
203
      }
204
      $vars[$var_name] = $info;
205
    }
206
  }
207

    
208
  // Add in all rules of the set.
209
  foreach(_rules_upgrade_fetch_all_rules() as $rule_name => $rule) {
210
    if ($rule['#set'] == $name) {
211
      drupal_set_message(' >> ' . t('Converting %plugin %name...', array('%plugin' => t('rule'), '%name' => $rule_name . ': ' . $rule['#label'])));
212
      $new_rule = rules_upgrade_plugin_factory($rule);
213
      rules_upgrade_convert_element($rule, $new_rule);
214
      $new_rule->setParent($config);
215
    }
216
  }
217
  return $config;
218
}
219

    
220
/**
221
 * Convert a single element.
222
 *
223
 * @param $element
224
 *   The element to convert.
225
 * @param $target
226
 *   The converted element to write to.
227
 */
228
function rules_upgrade_convert_element(array $element, RulesPlugin $target) {
229
  foreach (array('active', 'label', 'weight') as $key) {
230
    if (isset($element['#' . $key])) {
231
      $target->$key = $element['#' . $key];
232
    }
233
  }
234
  // Go through the parameters and take over its configuration if possible.
235
  foreach ($target->pluginParameterInfo() as $name => $info) {
236
    rules_upgrade_element_parameter_settings($element, $target, $name);
237
  }
238
  // @todo: Care about php input evaluator for non-text parameters.
239

    
240
  // Take care of variable names and labels.
241
  foreach ($target->pluginProvidesVariables() as $name => $info) {
242
    rules_upgrade_element_variable_settings($element, $target, $name);
243
  }
244

    
245
  if ($target instanceof RulesConditionInterface && !empty($element['#negate'])) {
246
    $target->negate(TRUE);
247
  }
248
  if ($target instanceof RulesReactionRule) {
249
    // Cut of the 'event_' prefix.
250
    $target->event(substr($element['#set'], 6));
251
  }
252
  if ($element['#type'] == 'rule') {
253
    if (!empty($element['#conditions'])) {
254
      foreach (element_children($element['#conditions']) as $key) {
255
        $child = rules_upgrade_plugin_factory($element['#conditions'][$key]);
256
        rules_upgrade_convert_element($element['#conditions'][$key], $child);
257
        $target->condition($child);
258
      }
259
    }
260
    if (!empty($element['#actions'])) {
261
      foreach (element_children($element['#actions']) as $key) {
262
        $child = rules_upgrade_plugin_factory($element['#actions'][$key]);
263
        rules_upgrade_convert_element($element['#actions'][$key], $child);
264
        $target->action($child);
265
      }
266
    }
267
  }
268

    
269
  // Invoke action/condition specific hooks and a general one.
270
  if (($element['#type'] == 'action' || $element['#type'] == 'condition')) {
271
    if (function_exists($function = $element['#name'] .'_upgrade')) {
272
      $element_name = $function($element, $target);
273
    }
274
    elseif (isset($element['#info']['base']) && function_exists($function = $element['#info']['base'] .'_upgrade')) {
275
      $element_name = $function($element, $target);
276
    }
277
  }
278

    
279
  drupal_alter('rules_element_upgrade', $element, $target);
280
  // Recurse down, if necessary.
281
  foreach (element_children($element) as $key) {
282
    $child = rules_upgrade_plugin_factory($element[$key]);
283
    rules_upgrade_convert_element($element[$key], $child);
284
    $child->setParent($target);
285
  }
286
  if ($target instanceof RulesContainerPlugin) {
287
    $target->sortChildren();
288
  }
289
}
290

    
291
/**
292
 * Creates the right element.
293
 */
294
function rules_upgrade_plugin_factory($element) {
295
  if ($element['#type'] == 'rule' && !empty($element['#set']) && strpos($element['#set'], 'event_') === 0) {
296
    return rules_plugin_factory('reaction rule');
297
  }
298

    
299
  switch ($element['#type']) {
300
    case 'OR':
301
      return rules_plugin_factory('or');
302
    case 'AND':
303
      return rules_plugin_factory('and');
304
    default:
305
      return rules_plugin_factory($element['#type']);
306

    
307
    case 'action':
308
    case 'condition':
309
      if (isset($element['#name'])) {
310
        // Try to come up with the right action/condition name ourself, then
311
        // invoke a hook.
312
        $cache = rules_get_cache();
313
        $items = $cache[$element['#type'] == 'action' ? 'action_info' : 'condition_info'];
314

    
315
        if (isset($items[$element['#name']])) {
316
          $element_name = $element['#name'];
317
        }
318
        elseif (($name = str_replace('rules_', '', $element['#name'])) && isset($items[$name])) {
319
          $element_name = $name;
320
        }
321
        elseif (($name = str_replace($element['#type'] . '_', '', $element['#name'])) && isset($items[$name])) {
322
          $element_name = $name;
323
        }
324
        elseif (($name = str_replace('rules_' . $element['#type'] . '_', '', $element['#name'])) && isset($items[$name])) {
325
          $element_name = $name;
326
        }
327
        elseif (isset($element['#info']['base']) && isset($items[$element['#info']['base']])) {
328
          $element_name = $name;
329
        }
330

    
331
        // Call the upgrade callback if one has been defined.
332
        if (function_exists($function = $element['#name'] .'_upgrade_map_name') || (isset($element['#info']['base']) && function_exists($function = $element['#info']['base'] .'_upgrade_map_name'))) {
333
          $element_name = $function($element);
334
        }
335
        if (!isset($element_name)) {
336
          throw new RulesIntegrityException(t("Cannot find @plugin %name. Maybe a required is missing or the module has not implemented the upgrade functionality.", array('@plugin' => $element['#type'], '%name' => $element['#name'])));
337
        }
338
        return rules_plugin_factory($element['#type'], $element_name);
339
      }
340
      break;
341
  }
342
}
343

    
344
/**
345
 * Converts the settings for a given parameter.
346
 */
347
function rules_upgrade_element_parameter_settings($element, $target, $name, $new_name = NULL) {
348
  if (!isset($new_name)) {
349
    $new_name = $name;
350
  }
351
  if (isset($element['#settings'][$name])) {
352
    // In case a single token has been used, just convert it to a data
353
    // selector.
354
    if (is_string($element['#settings'][$name]) && preg_match("/\[(.*)\]$/", $element['#settings'][$name], $matches)) {
355
      $target->settings[$new_name . ':select'] = $matches[1];
356
    }
357
    else {
358
      $target->settings[$new_name] = $element['#settings'][$name];
359
    }
360
  }
361
  elseif (isset($element['#settings']['#argument map'][$name])) {
362
    $target->settings[$new_name . ':select'] = $element['#settings']['#argument map'][$name];
363
  }
364
}
365

    
366
/**
367
 * Converts the settings for a given variable.
368
 */
369
function rules_upgrade_element_variable_settings($element, $target, $name, $new_name = NULL) {
370
  if (!isset($new_name)) {
371
    $new_name = $name;
372
  }
373
  if (isset($element['#settings']['#argument map'][$name])) {
374
    $target->settings[$new_name . ':var'] = $element['#settings']['#argument map'][$name];
375
    $target->settings[$new_name . ':label'] = $element['#info']['new variables'][$target->settings[$new_name . ':var']]['label'];
376
  }
377
}
378

    
379
/**
380
 * Upgrade callbacks for upgrading the provided Rules 1.x integration.
381
 */
382

    
383
// Comment.module integration.
384
function rules_action_load_comment_upgrade_map_name($element) {
385
  return 'entity_fetch';
386
}
387
function rules_action_load_comment_upgrade($element, $target) {
388
  $target->settings['type'] = 'comment';
389
  rules_upgrade_element_parameter_settings($element, $target, 'cid', 'id');
390
  rules_upgrade_element_variable_settings($element, $target, 'comment_loaded', 'entity_fetched');
391
}
392

    
393
// Node.module integration.
394
function rules_condition_content_is_type_upgrade_map_name($element) {
395
  return 'node_is_of_type';
396
}
397
function rules_condition_content_is_published_upgrade_map_name($element) {
398
  return 'node_is_published';
399
}
400
function rules_condition_content_is_sticky_upgrade_map_name($element) {
401
  return 'node_is_sticky';
402
}
403
function rules_condition_content_is_promoted_upgrade_map_name($element) {
404
  return 'node_is_promoted';
405
}
406
function rules_condition_content_is_new_upgrade_map_name($element) {
407
  return 'entity_is_new';
408
}
409
function rules_condition_content_is_new_upgrade($element, $target) {
410
  rules_upgrade_element_parameter_settings($element, $target, 'node', 'entity');
411
}
412
function rules_action_node_set_author_upgrade_map_name($element) {
413
  return 'data_set';
414
}
415
function rules_action_node_set_author_upgrade($element, $target) {
416
  $target->settings['data:select'] = $element['#settings']['#argument map']['node'] . ':author';
417
  $target->settings['value:select'] = $element['#settings']['#argument map']['author'];
418
}
419
function rules_action_node_load_author_upgrade_map_name($element) {
420
  return 'entity_fetch';
421
}
422
function rules_action_node_load_author_upgrade($element, $target) {
423
  $target->settings['type'] = 'user';
424
  $target->settings['id'] = $element['#settings']['#argument map']['node'] . ':author:uid';
425
}
426
function rules_action_set_node_title_upgrade_map_name($element) {
427
  return 'data_set';
428
}
429
function rules_action_set_node_title_upgrade($element, $target) {
430
  $target->settings['data:select'] = $element['#settings']['#argument map']['node'] . ':title';
431
  $target->settings['value'] = $element['#settings']['title'];
432
}
433
function rules_action_add_node_upgrade_map_name($element) {
434
  return 'entity_create';
435
}
436
function rules_action_add_node_upgrade($element, $target) {
437
  $target->settings['type'] = 'node';
438
  rules_upgrade_element_parameter_settings($element, $target, 'title', 'param_title');
439
  rules_upgrade_element_parameter_settings($element, $target, 'author', 'param_author');
440
  rules_upgrade_element_parameter_settings($element, $target, 'type', 'param_type');
441
  rules_upgrade_element_variable_settings($element, $target, 'node_added', 'entity_created');
442
  if (!empty($element['#settings']['node_access'])) {
443
    drupal_set_message(t('Warning: The node-access check option for the node creation action is not supported any more.'));
444
  }
445
}
446
function rules_action_load_node_upgrade_map_name($element) {
447
  return 'entity_fetch';
448
}
449
function rules_action_load_node_upgrade($element, $target) {
450
  $target->settings['type'] = 'node';
451
  rules_upgrade_element_parameter_settings($element, $target, 'nid', 'id');
452
  rules_upgrade_element_parameter_settings($element, $target, 'vid', 'revision_id');
453
  rules_upgrade_element_variable_settings($element, $target, 'node_loaded', 'entity_fetched');
454
}
455
function rules_action_delete_node_upgrade_map_name($element) {
456
  return 'entity_delete';
457
}
458
function rules_action_delete_node_upgrade($element, $target) {
459
  rules_upgrade_element_parameter_settings($element, $target, 'node', 'entity');
460
}
461
function rules_core_node_publish_action_upgrade_map_name($element) {
462
  return 'node_publish';
463
}
464
function rules_core_node_unpublish_action_upgrade_map_name($element) {
465
  return 'node_unpublish';
466
}
467
function rules_core_node_make_sticky_action_upgrade_map_name($element) {
468
  return 'node_make_sticky_action';
469
}
470
function rules_core_node_make_unsticky_action_upgrade_map_name($element) {
471
  return 'node_make_unsticky_action';
472
}
473
function rules_core_node_promote_action_upgrade_map_name($element) {
474
  return 'node_promote_action';
475
}
476
function rules_core_node_unpromote_action_upgrade_map_name($element) {
477
  return 'node_unpromote_action';
478
}
479

    
480

    
481
// Path.module integration.
482
function rules_condition_url_has_alias_upgrade_map_name($element) {
483
  return 'path_has_alias';
484
}
485
function rules_condition_url_has_alias_upgrade($element, $target) {
486
  $target->settings['source'] = $element['#settings']['src'];
487
  $target->settings['alias'] = $element['#settings']['dst'];
488
}
489
function rules_condition_alias_exists_upgrade_map_name($element) {
490
  return 'path_alias_exists';
491
}
492
function rules_condition_alias_exists_upgrade($element, $target) {
493
  $target->settings['alias'] = $element['#settings']['dst'];
494
}
495
function rules_action_path_alias_upgrade($element, $target) {
496
  $target->settings['source'] = $element['#settings']['src'];
497
  $target->settings['alias'] = $element['#settings']['dst'];
498
}
499
function rules_action_node_path_alias_upgrade($element, $target) {
500
  $target->settings['alias'] = $element['#settings']['dst'];
501
}
502

    
503
// PHP.module integration.
504
function rules_condition_custom_php_upgrade_map_name($element) {
505
  return 'php_eval';
506
}
507
function rules_action_custom_php_upgrade_map_name($element) {
508
  return 'php_eval';
509
}
510

    
511
// General Rules integration.
512
function rules_condition_text_compare_upgrade_map_name($element) {
513
  // @todo: Support regex.
514
  return 'data_is';
515
}
516
function rules_condition_text_compare_upgrade($element, $target) {
517
  rules_upgrade_element_parameter_settings($element, $target, 'text1', 'data');
518
  rules_upgrade_element_parameter_settings($element, $target, 'text2', 'value');
519
}
520
function rules_condition_number_compare_upgrade_map_name($element) {
521
  return 'data_is';
522
}
523
function rules_condition_number_compare_upgrade($element, $target) {
524
  rules_upgrade_element_parameter_settings($element, $target, 'number1', 'data');
525
  rules_upgrade_element_parameter_settings($element, $target, 'number2', 'value');
526
}
527
function rules_condition_check_boolean_upgrade_map_name($element) {
528
  return 'data_is';
529
}
530
function rules_condition_check_boolean_upgrade($element, $target) {
531
  rules_upgrade_element_parameter_settings($element, $target, 'boolean', 'data');
532
  $target->settings['value'] = TRUE;
533
}
534
function rules_action_invoke_set_upgrade_map_name($element) {
535
  return 'component_' . $element['#info']['set'];
536
}
537
function rules_action_invoke_set_upgrade($element, $target) {
538
  foreach ($element['#info']['arguments'] as $name => $info) {
539
    rules_upgrade_element_parameter_settings($element, $target, $name);
540
  }
541
}
542
function rules_action_save_variable_upgrade_map_name($element) {
543
  return isset($element['#info']['new variables']) ? 'variable_add' : 'entity_save';
544
}
545
function rules_action_save_variable_upgrade($element, $target) {
546
  $type = $element['#info']['arguments']['var_name']['default value'];
547
  if (isset($element['#info']['new variables'])) {
548
    $target->settings['type'] = $type;
549
    rules_upgrade_element_parameter_settings($element, $target, $type, 'value');
550
    rules_upgrade_element_variable_settings($element, $target, $type, 'variable_added');
551
  }
552
  else {
553
    rules_upgrade_element_parameter_settings($element, $target, $type, 'entity');
554
  }
555
}
556

    
557

    
558
// System.module integration.
559
function rules_action_set_breadcrumb_upgrade_map_name($element) {
560
  return 'breadcumb_set';
561
}
562
function rules_action_mail_to_user_upgrade_map_name($element) {
563
  return 'mail';
564
}
565
function rules_action_mail_to_user_upgrade($element, $target) {
566
  $target->settings['to:select'] = $element['#settings']['#argument map']['user'] . ':mail';
567
}
568
function rules_action_drupal_goto_upgrade_map_name($element) {
569
  return 'redirect';
570
}
571
function rules_action_drupal_goto_upgrade($element, $target) {
572
  $settings = $element['#settings'];
573
  $target->settings['url'] = $settings['path'];
574
  $target->settings['url'] .= $settings['query'] ? '?' . $settings['query'] : '';
575
  $target->settings['url'] .= $settings['fragment'] ? '#' . $settings['fragment'] : '';
576
  if ($settings['immediate']) {
577
    drupal_set_message(t("Warning: The 'immediate' option for the page redirect action has been dropped in Rules 2.x."));
578
  }
579
}
580

    
581
function rules_action_watchdog_upgrade_map_name($element) {
582
  // @todo: Support action in Rules 2.x!
583
  return NULL;
584
}
585

    
586
// Taxonomy.module integration.
587
// @todo: Finish.
588
function rules_action_taxonomy_load_term_upgrade_map_name($element) {
589
  return 'entity_fetch';
590
}
591
function rules_action_taxonomy_add_term_upgrade_map_name($element) {
592
  return 'entity_create';
593
}
594
function rules_action_taxonomy_delete_term_upgrade_map_name($element) {
595
  return 'entity_delete';
596
}
597
function rules_action_taxonomy_term_assign_to_content_upgrade_map_name($element) {
598
  // @todo : list.
599
  return NULL;
600
}
601
function rules_action_taxonomy_term_remove_from_content_upgrade_map_name($element) {
602
  // @todo : list.
603
  return NULL;
604
}
605
function rules_action_taxonomy_load_vocab_upgrade_map_name($element) {
606
  return 'entity_fetch';
607
}
608
function rules_action_taxonomy_add_vocab_upgrade_map_name($element) {
609
  return 'data_set';
610
}
611

    
612
// User.module integration.
613
function rules_condition_user_hasrole_upgrade_map_name($element) {
614
  return 'user_has_role';
615
}
616
function rules_condition_user_hasrole_upgrade($element, $target) {
617
  rules_upgrade_element_parameter_settings($element, $target, 'user', 'account');
618
}
619
function rules_condition_user_comparison_upgrade_map_name($element) {
620
  return 'data_is';
621
}
622
function rules_condition_user_comparison_upgrade($element, $target) {
623
  rules_upgrade_element_parameter_settings($element, $target, 'user1', 'data');
624
  rules_upgrade_element_parameter_settings($element, $target, 'user2', 'value');
625
}
626
function rules_action_user_addrole_upgrade_map_name($element) {
627
  return 'user_add_role';
628
}
629
function rules_action_user_addrole_upgrade($element, $target) {
630
  rules_upgrade_element_parameter_settings($element, $target, 'user', 'account');
631
}
632
function rules_action_user_removerole_upgrade_map_name($element) {
633
  return 'user_remove_role';
634
}
635
function rules_action_user_removerole_upgrade($element, $target) {
636
  rules_upgrade_element_parameter_settings($element, $target, 'user', 'account');
637
}
638
function rules_action_load_user_upgrade_map_name($element) {
639
  if (!empty($element['#settings']['username'])) {
640
    drupal_set_message(t('Warning: Directly upgrading the load user by name action is not supported.'));
641
  }
642
  return 'entity_fetch';
643
}
644
function rules_action_load_user_upgrade($element, $target) {
645
  $target->settings['type'] = 'user';
646
  rules_upgrade_element_parameter_settings($element, $target, 'userid', 'id');
647
  rules_upgrade_element_variable_settings($element, $target, 'user_loaded', 'entity_fetched');
648
}
649
function rules_action_user_create_upgrade_map_name($element) {
650
  return 'entity_create';
651
}
652
function rules_action_user_create_upgrade($element, $target) {
653
  $target->settings['type'] = 'user';
654
  rules_upgrade_element_parameter_settings($element, $target, 'username', 'param_name');
655
  rules_upgrade_element_parameter_settings($element, $target, 'email', 'param_mail');
656
  rules_upgrade_element_variable_settings($element, $target, 'user_added', 'entity_created');
657

    
658
}
659
function rules_core_user_block_user_action_upgrade_map_name($element) {
660
  return 'user_block';
661
}
662
function rules_core_user_block_user_action_upgrade($element, $target) {
663
  $target->settings['account:select'] = $element['#settings']['#argument map']['user'];
664
}