Index: views_bulk_operations_plugin_style.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views_bulk_operations/Attic/views_bulk_operations_plugin_style.inc,v
retrieving revision 1.1.2.36
diff -u -p -r1.1.2.36 views_bulk_operations_plugin_style.inc
--- views_bulk_operations_plugin_style.inc	10 Jun 2009 05:29:11 -0000	1.1.2.36
+++ views_bulk_operations_plugin_style.inc	14 Jun 2009 16:33:24 -0000
@@ -104,7 +104,7 @@ class views_bulk_operations_plugin_style
 
   function get_selected_operations() {
     $selected = array();
-    foreach (array_filter($this->options['selected_operations']) as $key => $operation) {
+    foreach (array_filter($this->options['selected_operations']) as $key) {
       if (module_exists('actions_permissions')) {
         $perm = actions_permissions_get_perm($this->options['all_operations'][$key]['label'], $this->options['all_operations'][$key]['callback']);
         if (!user_access($perm)) continue;
@@ -132,7 +132,7 @@ class views_bulk_operations_plugin_style
         $operation['object'] = $info['type'];
       }
       if ($operation['object'] == $info['type']) {
-        $options[$key] = $operation['label'] .' ('. $operation['callback'] .')'; 
+        $options[$key] = $operation['label'] .' ('. check_plain($operation['callback']) .')';
       }
     }
     return $options;
@@ -151,7 +151,7 @@ class views_bulk_operations_plugin_style
       $hook_name = $object_type .'_operations';
       foreach (module_invoke_all($hook_name) as $operation) {
         if (empty($operation['callback'])) continue;
-        $key = md5($operation['callback'] . (isset($operation['callback arguments']) ? serialize($operation['callback arguments']) : ''));
+        $key = check_plain($operation['callback'] . (empty($operation['callback arguments']) ? '' : ':'. serialize($operation['callback arguments'])));
         if (!isset($operation['behavior'])) { // assume operations modify nodes by default
           $operation['behavior'] = array('changes_node_property');
         }
@@ -170,7 +170,7 @@ class views_bulk_operations_plugin_style
 
     $action_operations = actions_list() + $this->get_custom_actions();
     foreach ($action_operations as $callback => $operation) {
-      $key = md5($callback);
+      $key = check_plain($callback);
       $operations[$key] = array(
         'label'              => $operation['description'],
         'callback'           => $callback,
@@ -211,14 +211,16 @@ class views_bulk_operations_plugin_style
     $static_actions = actions_list();
     $result = db_query("SELECT * FROM {actions} WHERE parameters > ''");
     while ($action = db_fetch_object($result)) {
-      $actions[$action->aid] = array(
+      $parameters = unserialize($action->parameters);
+      $key = check_plain($action->callback . (empty($parameters) ? '' : ':'. $action->parameters));
+      $actions[$key] = array(
         'description' => $action->description,
         'type' => $action->type,
         'configurable' => FALSE,
-        'parameters' => unserialize($action->parameters),
+        'parameters' => $parameters,
       );
-      if (isset($static_actions[$action->callback]['behavior'])) $actions[$action->aid]['behavior'] = $static_actions[$action->callback]['behavior'];
-      if (isset($static_actions[$action->callback]['aggregate'])) $actions[$action->aid]['aggregate'] = $static_actions[$action->callback]['aggregate'];
+      if (isset($static_actions[$action->callback]['behavior'])) $actions[$key]['behavior'] = $static_actions[$action->callback]['behavior'];
+      if (isset($static_actions[$action->callback]['aggregate'])) $actions[$key]['aggregate'] = $static_actions[$action->callback]['aggregate'];
     }
     return $actions;
   }
Index: views_bulk_operations.install
===================================================================
RCS file: views_bulk_operations.install
diff -N views_bulk_operations.install
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ views_bulk_operations.install	14 Jun 2009 16:33:24 -0000
@@ -0,0 +1,57 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Installation and update functions.
+ */
+
+/**
+ * Implementation of hook_update_N().
+ *
+ * Replace MD5 hashes with meaningful strings in selected operations arrays.
+ */
+function views_bulk_operations_update_6000() {
+  views_include('cache');
+  $operations = array();
+  foreach (array_keys(views_bulk_operations_get_object_info()) as $object_type) {
+    $hook_name = $object_type .'_operations';
+    foreach (module_invoke_all($hook_name) as $operation) {
+      if (!empty($operation['callback'])) {
+        $key = md5($operation['callback'] . (isset($operation['callback arguments']) ? serialize($operation['callback arguments']) : ''));
+        $operations[$key] = check_plain($operation['callback'] . (empty($operation['callback arguments']) ? '' : ':'. serialize($operation['callback arguments'])));
+      }
+    }
+  }
+  $result = db_query("SELECT * FROM {actions} WHERE parameters > ''");
+  while ($action = db_fetch_object($result)) {
+    $key = md5($action->aid);
+    $parameters = unserialize($action->parameters);
+    $operations[$key] = check_plain($action->callback . (empty($parameters) ? '' : ':'. $action->parameters));
+  }
+  foreach (array_keys(actions_list()) as $callback) {
+    $key = md5($callback);
+    $operations[$key] = check_plain($callback);
+  }
+  foreach (views_get_all_views() as $name => $view) {
+    $changed = FALSE;
+    foreach (array_keys($view->display) as $display) {
+      $display_options = &$view->display[$display]->display_options;
+      if (isset($display_options['style_plugin']) && $display_options['style_plugin'] == 'bulk') {
+        $changed = TRUE;
+        $selected_operations = $display_options['style_options']['selected_operations'];
+        $display_options['style_options']['selected_operations'] = array();
+        foreach (array_filter($selected_operations) as $operation) {
+          // If an old operation is identified, replace it.
+          $display_options['style_options']['selected_operations'][] = isset($operations[$operation]) ? $operations[$operation] : $operation;
+        }
+      }
+    }
+    if ($changed) {
+      $view->save();
+      views_object_cache_clear('view', $name);
+    }
+  }
+  cache_clear_all('*', 'cache_views');
+  return array();
+}
