Projet

Général

Profil

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

root / drupal7 / sites / all / modules / rules / includes / rules.upgrade.inc @ 950416da

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 dependent 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
/**
141
 * Submit handler for deleting data.
142
 */
143
function rules_upgrade_confirm_clear_form_submit($form, &$form_state) {
144
  db_drop_table('rules_rules');
145
  db_drop_table('rules_sets');
146
  db_drop_table('rules_scheduler_d6');
147
  drupal_set_message(t('Rules 1.x configurations have been deleted.'));
148
  $form_state['redirect'] = 'admin';
149
}
150

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

    
160
/**
161
 * Fetches all rules.
162
 */
163
function _rules_upgrade_fetch_all_rules() {
164
  $static = drupal_static(__FUNCTION__);
165

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

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

    
183
  if ($config instanceof RulesReactionRule) {
184
    rules_upgrade_convert_element($cfg_old, $config);
185
  }
186
  return $config;
187
}
188

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

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

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

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

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

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

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

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

    
302
  switch ($element['#type']) {
303
    case 'OR':
304
      return rules_plugin_factory('or');
305

    
306
    case 'AND':
307
      return rules_plugin_factory('and');
308

    
309
    default:
310
      return rules_plugin_factory($element['#type']);
311

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

    
320
        if (isset($items[$element['#name']])) {
321
          $element_name = $element['#name'];
322
        }
323
        elseif (($name = str_replace('rules_', '', $element['#name'])) && isset($items[$name])) {
324
          $element_name = $name;
325
        }
326
        elseif (($name = str_replace($element['#type'] . '_', '', $element['#name'])) && isset($items[$name])) {
327
          $element_name = $name;
328
        }
329
        elseif (($name = str_replace('rules_' . $element['#type'] . '_', '', $element['#name'])) && isset($items[$name])) {
330
          $element_name = $name;
331
        }
332
        elseif (isset($element['#info']['base']) && isset($items[$element['#info']['base']])) {
333
          $element_name = $name;
334
        }
335

    
336
        // Call the upgrade callback if one has been defined.
337
        if (function_exists($function = $element['#name'] . '_upgrade_map_name') || (isset($element['#info']['base']) && function_exists($function = $element['#info']['base'] . '_upgrade_map_name'))) {
338
          $element_name = $function($element);
339
        }
340
        if (!isset($element_name)) {
341
          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'])));
342
        }
343
        return rules_plugin_factory($element['#type'], $element_name);
344
      }
345
      break;
346
  }
347
}
348

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

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

    
384
/**
385
 * Upgrade callbacks for upgrading the provided Rules 1.x integration.
386
 */
387

    
388
/**
389
 * Comment.module integration.
390
 */
391
function rules_action_load_comment_upgrade_map_name($element) {
392
  return 'entity_fetch';
393
}
394

    
395
function rules_action_load_comment_upgrade($element, $target) {
396
  $target->settings['type'] = 'comment';
397
  rules_upgrade_element_parameter_settings($element, $target, 'cid', 'id');
398
  rules_upgrade_element_variable_settings($element, $target, 'comment_loaded', 'entity_fetched');
399
}
400

    
401
/**
402
 * Node.module integration.
403
 */
404
function rules_condition_content_is_type_upgrade_map_name($element) {
405
  return 'node_is_of_type';
406
}
407

    
408
function rules_condition_content_is_published_upgrade_map_name($element) {
409
  return 'node_is_published';
410
}
411

    
412
function rules_condition_content_is_sticky_upgrade_map_name($element) {
413
  return 'node_is_sticky';
414
}
415

    
416
function rules_condition_content_is_promoted_upgrade_map_name($element) {
417
  return 'node_is_promoted';
418
}
419

    
420
function rules_condition_content_is_new_upgrade_map_name($element) {
421
  return 'entity_is_new';
422
}
423

    
424
function rules_condition_content_is_new_upgrade($element, $target) {
425
  rules_upgrade_element_parameter_settings($element, $target, 'node', 'entity');
426
}
427

    
428
function rules_action_node_set_author_upgrade_map_name($element) {
429
  return 'data_set';
430
}
431

    
432
function rules_action_node_set_author_upgrade($element, $target) {
433
  $target->settings['data:select'] = $element['#settings']['#argument map']['node'] . ':author';
434
  $target->settings['value:select'] = $element['#settings']['#argument map']['author'];
435
}
436

    
437
function rules_action_node_load_author_upgrade_map_name($element) {
438
  return 'entity_fetch';
439
}
440

    
441
function rules_action_node_load_author_upgrade($element, $target) {
442
  $target->settings['type'] = 'user';
443
  $target->settings['id'] = $element['#settings']['#argument map']['node'] . ':author:uid';
444
}
445

    
446
function rules_action_set_node_title_upgrade_map_name($element) {
447
  return 'data_set';
448
}
449

    
450
function rules_action_set_node_title_upgrade($element, $target) {
451
  $target->settings['data:select'] = $element['#settings']['#argument map']['node'] . ':title';
452
  $target->settings['value'] = $element['#settings']['title'];
453
}
454

    
455
function rules_action_add_node_upgrade_map_name($element) {
456
  return 'entity_create';
457
}
458

    
459
function rules_action_add_node_upgrade($element, $target) {
460
  $target->settings['type'] = 'node';
461
  rules_upgrade_element_parameter_settings($element, $target, 'title', 'param_title');
462
  rules_upgrade_element_parameter_settings($element, $target, 'author', 'param_author');
463
  rules_upgrade_element_parameter_settings($element, $target, 'type', 'param_type');
464
  rules_upgrade_element_variable_settings($element, $target, 'node_added', 'entity_created');
465
  if (!empty($element['#settings']['node_access'])) {
466
    drupal_set_message(t('Warning: The node-access check option for the node creation action is not supported any more.'));
467
  }
468
}
469

    
470
function rules_action_load_node_upgrade_map_name($element) {
471
  return 'entity_fetch';
472
}
473

    
474
function rules_action_load_node_upgrade($element, $target) {
475
  $target->settings['type'] = 'node';
476
  rules_upgrade_element_parameter_settings($element, $target, 'nid', 'id');
477
  rules_upgrade_element_parameter_settings($element, $target, 'vid', 'revision_id');
478
  rules_upgrade_element_variable_settings($element, $target, 'node_loaded', 'entity_fetched');
479
}
480

    
481
function rules_action_delete_node_upgrade_map_name($element) {
482
  return 'entity_delete';
483
}
484

    
485
function rules_action_delete_node_upgrade($element, $target) {
486
  rules_upgrade_element_parameter_settings($element, $target, 'node', 'entity');
487
}
488

    
489
function rules_core_node_publish_action_upgrade_map_name($element) {
490
  return 'node_publish';
491
}
492

    
493
function rules_core_node_unpublish_action_upgrade_map_name($element) {
494
  return 'node_unpublish';
495
}
496

    
497
function rules_core_node_make_sticky_action_upgrade_map_name($element) {
498
  return 'node_make_sticky_action';
499
}
500

    
501
function rules_core_node_make_unsticky_action_upgrade_map_name($element) {
502
  return 'node_make_unsticky_action';
503
}
504

    
505
function rules_core_node_promote_action_upgrade_map_name($element) {
506
  return 'node_promote_action';
507
}
508

    
509
function rules_core_node_unpromote_action_upgrade_map_name($element) {
510
  return 'node_unpromote_action';
511
}
512

    
513
/**
514
 * Path.module integration.
515
 */
516
function rules_condition_url_has_alias_upgrade_map_name($element) {
517
  return 'path_has_alias';
518
}
519

    
520
function rules_condition_url_has_alias_upgrade($element, $target) {
521
  $target->settings['source'] = $element['#settings']['src'];
522
  $target->settings['alias'] = $element['#settings']['dst'];
523
}
524

    
525
function rules_condition_alias_exists_upgrade_map_name($element) {
526
  return 'path_alias_exists';
527
}
528

    
529
function rules_condition_alias_exists_upgrade($element, $target) {
530
  $target->settings['alias'] = $element['#settings']['dst'];
531
}
532

    
533
function rules_action_path_alias_upgrade($element, $target) {
534
  $target->settings['source'] = $element['#settings']['src'];
535
  $target->settings['alias'] = $element['#settings']['dst'];
536
}
537

    
538
function rules_action_node_path_alias_upgrade($element, $target) {
539
  $target->settings['alias'] = $element['#settings']['dst'];
540
}
541

    
542
/**
543
 * PHP.module integration.
544
 */
545
function rules_condition_custom_php_upgrade_map_name($element) {
546
  return 'php_eval';
547
}
548

    
549
function rules_action_custom_php_upgrade_map_name($element) {
550
  return 'php_eval';
551
}
552

    
553
/**
554
 * General Rules integration.
555
 */
556
function rules_condition_text_compare_upgrade_map_name($element) {
557
  // @todo Support regex.
558
  return 'data_is';
559
}
560

    
561
function rules_condition_text_compare_upgrade($element, $target) {
562
  rules_upgrade_element_parameter_settings($element, $target, 'text1', 'data');
563
  rules_upgrade_element_parameter_settings($element, $target, 'text2', 'value');
564
}
565

    
566
function rules_condition_number_compare_upgrade_map_name($element) {
567
  return 'data_is';
568
}
569

    
570
function rules_condition_number_compare_upgrade($element, $target) {
571
  rules_upgrade_element_parameter_settings($element, $target, 'number1', 'data');
572
  rules_upgrade_element_parameter_settings($element, $target, 'number2', 'value');
573
}
574

    
575
function rules_condition_check_boolean_upgrade_map_name($element) {
576
  return 'data_is';
577
}
578

    
579
function rules_condition_check_boolean_upgrade($element, $target) {
580
  rules_upgrade_element_parameter_settings($element, $target, 'boolean', 'data');
581
  $target->settings['value'] = TRUE;
582
}
583

    
584
function rules_action_invoke_set_upgrade_map_name($element) {
585
  return 'component_' . $element['#info']['set'];
586
}
587

    
588
function rules_action_invoke_set_upgrade($element, $target) {
589
  foreach ($element['#info']['arguments'] as $name => $info) {
590
    rules_upgrade_element_parameter_settings($element, $target, $name);
591
  }
592
}
593

    
594
function rules_action_save_variable_upgrade_map_name($element) {
595
  return isset($element['#info']['new variables']) ? 'variable_add' : 'entity_save';
596
}
597

    
598
function rules_action_save_variable_upgrade($element, $target) {
599
  $type = $element['#info']['arguments']['var_name']['default value'];
600
  if (isset($element['#info']['new variables'])) {
601
    $target->settings['type'] = $type;
602
    rules_upgrade_element_parameter_settings($element, $target, $type, 'value');
603
    rules_upgrade_element_variable_settings($element, $target, $type, 'variable_added');
604
  }
605
  else {
606
    rules_upgrade_element_parameter_settings($element, $target, $type, 'entity');
607
  }
608
}
609

    
610
/**
611
 * System.module integration.
612
 */
613
function rules_action_set_breadcrumb_upgrade_map_name($element) {
614
  return 'breadcrumb_set';
615
}
616

    
617
function rules_action_mail_to_user_upgrade_map_name($element) {
618
  return 'mail';
619
}
620

    
621
function rules_action_mail_to_user_upgrade($element, $target) {
622
  $target->settings['to:select'] = $element['#settings']['#argument map']['user'] . ':mail';
623
}
624

    
625
function rules_action_drupal_goto_upgrade_map_name($element) {
626
  return 'redirect';
627
}
628

    
629
function rules_action_drupal_goto_upgrade($element, $target) {
630
  $settings = $element['#settings'];
631
  $target->settings['url'] = $settings['path'];
632
  $target->settings['url'] .= $settings['query'] ? '?' . $settings['query'] : '';
633
  $target->settings['url'] .= $settings['fragment'] ? '#' . $settings['fragment'] : '';
634
  if ($settings['immediate']) {
635
    drupal_set_message(t("Warning: The 'immediate' option for the page redirect action has been dropped in Rules 2.x."));
636
  }
637
}
638

    
639
function rules_action_watchdog_upgrade_map_name($element) {
640
  // @todo Support action in Rules 2.x!
641
  return NULL;
642
}
643

    
644
/**
645
 * Taxonomy.module integration.
646
 *
647
 * @todo Finish.
648
 */
649
function rules_action_taxonomy_load_term_upgrade_map_name($element) {
650
  return 'entity_fetch';
651
}
652

    
653
function rules_action_taxonomy_add_term_upgrade_map_name($element) {
654
  return 'entity_create';
655
}
656

    
657
function rules_action_taxonomy_delete_term_upgrade_map_name($element) {
658
  return 'entity_delete';
659
}
660

    
661
function rules_action_taxonomy_term_assign_to_content_upgrade_map_name($element) {
662
  // @todo List.
663
  return NULL;
664
}
665

    
666
function rules_action_taxonomy_term_remove_from_content_upgrade_map_name($element) {
667
  // @todo List.
668
  return NULL;
669
}
670

    
671
function rules_action_taxonomy_load_vocab_upgrade_map_name($element) {
672
  return 'entity_fetch';
673
}
674

    
675
function rules_action_taxonomy_add_vocab_upgrade_map_name($element) {
676
  return 'data_set';
677
}
678

    
679
/**
680
 * User.module integration.
681
 */
682
function rules_condition_user_hasrole_upgrade_map_name($element) {
683
  return 'user_has_role';
684
}
685

    
686
function rules_condition_user_hasrole_upgrade($element, $target) {
687
  rules_upgrade_element_parameter_settings($element, $target, 'user', 'account');
688
}
689

    
690
function rules_condition_user_comparison_upgrade_map_name($element) {
691
  return 'data_is';
692
}
693

    
694
function rules_condition_user_comparison_upgrade($element, $target) {
695
  rules_upgrade_element_parameter_settings($element, $target, 'user1', 'data');
696
  rules_upgrade_element_parameter_settings($element, $target, 'user2', 'value');
697
}
698

    
699
function rules_action_user_addrole_upgrade_map_name($element) {
700
  return 'user_add_role';
701
}
702

    
703
function rules_action_user_addrole_upgrade($element, $target) {
704
  rules_upgrade_element_parameter_settings($element, $target, 'user', 'account');
705
}
706

    
707
function rules_action_user_removerole_upgrade_map_name($element) {
708
  return 'user_remove_role';
709
}
710

    
711
function rules_action_user_removerole_upgrade($element, $target) {
712
  rules_upgrade_element_parameter_settings($element, $target, 'user', 'account');
713
}
714

    
715
function rules_action_load_user_upgrade_map_name($element) {
716
  if (!empty($element['#settings']['username'])) {
717
    drupal_set_message(t('Warning: Directly upgrading the load user by name action is not supported.'));
718
  }
719
  return 'entity_fetch';
720
}
721

    
722
function rules_action_load_user_upgrade($element, $target) {
723
  $target->settings['type'] = 'user';
724
  rules_upgrade_element_parameter_settings($element, $target, 'userid', 'id');
725
  rules_upgrade_element_variable_settings($element, $target, 'user_loaded', 'entity_fetched');
726
}
727

    
728
function rules_action_user_create_upgrade_map_name($element) {
729
  return 'entity_create';
730
}
731

    
732
function rules_action_user_create_upgrade($element, $target) {
733
  $target->settings['type'] = 'user';
734
  rules_upgrade_element_parameter_settings($element, $target, 'username', 'param_name');
735
  rules_upgrade_element_parameter_settings($element, $target, 'email', 'param_mail');
736
  rules_upgrade_element_variable_settings($element, $target, 'user_added', 'entity_created');
737
}
738

    
739
function rules_core_user_block_user_action_upgrade_map_name($element) {
740
  return 'user_block';
741
}
742

    
743
function rules_core_user_block_user_action_upgrade($element, $target) {
744
  $target->settings['account:select'] = $element['#settings']['#argument map']['user'];
745
}