? rules-409090.patch
Index: rules/modules/system.rules.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/rules/rules/modules/Attic/system.rules.inc,v
retrieving revision 1.1.2.17
diff -u -p -r1.1.2.17 system.rules.inc
--- rules/modules/system.rules.inc	20 Jul 2009 16:22:24 -0000	1.1.2.17
+++ rules/modules/system.rules.inc	8 Jul 2010 11:01:32 -0000
@@ -33,10 +33,15 @@ function system_rules_event_info() {
  */
 function system_rules_action_info() {
   return array(
+    'rules_action_drupal_clean_message' => array(
+      'label' => t('Clean messages on the site'),
+      'module' => 'System',
+      'eval input' => array('clean', 'type', 'other'),
+    ),
     'rules_action_drupal_message' => array(
       'label' => t('Show a configurable message on the site'),
       'module' => 'System',
-      'eval input' => array('message'),
+      'eval input' => array('message', 'type', 'clean', 'other'),
     ),
     'rules_action_set_breadcrumb' => array(
       'label' => t('Set breadcrumb'),
@@ -76,7 +81,24 @@ function system_rules_action_info() {
 }
 
 function rules_action_drupal_message($settings) {
-  drupal_set_message($settings['message'], $settings['error'] ? 'error' : 'status');
+  $type = $settings['type'];
+  if (isset($settings['other']) && ($settings['other'] != '')) {
+    $type = $settings['other'];
+  }
+  rules_action_drupal_clean_message($settings);
+  drupal_set_message(filter_xss($settings['message']), $type);
+}
+
+function rules_action_drupal_clean_message($settings) {
+  if ($settings['clean'] == 1) {
+    unset($_SESSION['messages']);
+  } elseif ($settings['clean'] == 2) {
+    $type = $settings['type'];
+    if (isset($settings['other']) && ($settings['other'] != '')) {
+      $type = $settings['other'];
+    }
+    unset($_SESSION['messages'][$type]);
+  }
 }
 
 /**
Index: rules/modules/system.rules_forms.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/rules/rules/modules/Attic/system.rules_forms.inc,v
retrieving revision 1.1.2.11
diff -u -p -r1.1.2.11 system.rules_forms.inc
--- rules/modules/system.rules_forms.inc	31 Jul 2009 10:21:43 -0000	1.1.2.11
+++ rules/modules/system.rules_forms.inc	8 Jul 2010 11:01:33 -0000
@@ -12,8 +12,8 @@
 /**
  * Action drupal message configuration form.
  */
-function rules_action_drupal_message_form($settings, &$form) {
-  $settings += array('message' => '', 'error' => '');
+function rules_action_drupal_message_form($settings = array(), &$form) {
+  $settings += array('message' => '', 'clean' => 0, 'type' => 'status', 'other' => '');
 
   $form['settings']['message'] = array(
     '#type' => 'textarea',
@@ -21,10 +21,47 @@ function rules_action_drupal_message_for
     '#default_value' => $settings['message'],
     '#description' => t('The message that should be displayed.'),
   );
-  $form['settings']['error'] = array(
-    '#type' => 'checkbox',
-    '#title' => t('Display as error message'),
-    '#default_value' => $settings['error'],
+  $form['settings']['clean'] = array(
+    '#type' => 'radios',
+    '#title' => t('Clean messages'),
+    '#options' => array(0 => t('Do not clean'), 1 => t('Clean all'), 2=>t('Clean selected type')),
+    '#default_value' => ($settings['clean'] ? $settings['clean'] : 0),
+  );
+  $form['settings']['type'] = array(
+    '#title'=>t('Type'), 
+    '#type'=>'select',
+    '#default_value'=>$settings['type'],
+    '#options' => array('status' => t('Status'), 'warning' => t('Warning'), 'error' => t('Error')),
+    '#multiple' => false,
+  );
+  $form['settings']['other'] = array(
+    '#title'=>t('Other type'), 
+    '#type'=>'textfield',
+    '#default_value'=>$settings['other'],
+    '#description' => t("Set the type instead of selecting from the list"),
+  );
+}
+
+function rules_action_drupal_clean_message_form($settings = array(), &$form) {
+
+  $form['settings']['clean'] = array(
+    '#type' => 'radios',
+    '#title' => t('Clean messages'),
+    '#options' => array(1 => t('Clean all'), 2=>t('Clean selected type')),
+    '#default_value' => ($settings['clean'] ? $settings['clean'] : 1),
+  );
+  $form['settings']['type'] = array(
+    '#title'=>t('Type'), 
+    '#type'=>'select',
+    '#default_value'=>$settings['type'],
+    '#options' => array('status' => t('Status'), 'warning' => t('Warning'), 'error' => t('Error')),
+    '#multiple' => false,
+  );
+  $form['settings']['other'] = array(
+    '#title'=>t('Other type'), 
+    '#type'=>'textfield',
+    '#default_value'=>$settings['other'],
+    '#description' => t("Set the type instead of selecting from the list"),
   );
 }
 
