Index: includes/actions.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/actions.inc,v retrieving revision 1.23 diff -u -p -r1.23 actions.inc --- includes/actions.inc 4 Dec 2008 18:42:03 -0000 1.23 +++ includes/actions.inc 5 Dec 2008 00:18:42 -0000 @@ -69,8 +69,8 @@ function actions_do($action_ids, $object $query->addField('actions', 'parameters'); $query->condition('aid', $conditions, 'IN'); $result = $query->execute(); - foreach ($result as $action) { - $actions[$action->aid] = $action->parameters ? unserialize($action->parameters) : array(); + foreach ($result as actions_unpack($action)) { + $actions[$action->aid] = $action->parameters; $actions[$action->aid]['callback'] = $action->callback; $actions[$action->aid]['type'] = $action->type; } @@ -94,9 +94,9 @@ function actions_do($action_ids, $object else { // If it's a configurable action, retrieve stored parameters. if (is_numeric($action_ids)) { - $action = db_query("SELECT callback, parameters FROM {actions} WHERE aid = :aid", array(':aid' => $action_ids))->fetchObject(); + $action = actions_load($actions_ids); $function = $action->callback; - $context = array_merge($context, unserialize($action->parameters)); + $context = array_merge($context, $action->parameters); $result[$action_ids] = $function($object, $context, $a1, $a2); } // Singleton action; $action_ids is the function name. @@ -349,10 +349,26 @@ function actions_save($function, $type, * The appropriate action row from the database as an object. */ function actions_load($aid) { - return db_query("SELECT aid, type, callback, parameters, description FROM {actions} WHERE aid = :aid", array(':aid' => $aid))->fetchObject(); + return actions_unpack(db_query("SELECT aid, type, callback, parameters, description FROM {actions} WHERE aid = :aid", array(':aid' => $aid))->fetchObject()); } /** + * Prepare an action database object for use. + * + * @param $action + * An action database object. + * + * @return + * The given action field with unpacked fields. + */ + +function actions_unpack($action) { + $action->parameters = ($action->parameters) ? unserialize($action->parameters) : array(); + return $action; +} + + +/** * Delete a single action from the database. * * @param $aid Index: modules/system/system.module =================================================================== RCS file: /cvs/drupal/drupal/modules/system/system.module,v retrieving revision 1.650 diff -u -p -r1.650 system.module --- modules/system/system.module 28 Nov 2008 09:25:59 -0000 1.650 +++ modules/system/system.module 5 Dec 2008 00:18:44 -0000 @@ -1713,16 +1713,13 @@ function system_actions_configure($form_ if (is_numeric($action)) { $aid = $action; // Load stored parameter values from database. - $data = db_fetch_object(db_query("SELECT * FROM {actions} WHERE aid = '%s'", $aid)); + $data = actions_load($aid); $edit['actions_description'] = $data->description; $edit['actions_type'] = $data->type; $function = $data->callback; $action = md5($data->callback); - $params = unserialize($data->parameters); - if ($params) { - foreach ($params as $name => $val) { - $edit[$name] = $val; - } + foreach ($data->parameters as $name => $val) { + $edit[$name] = $val; } } else {