function services_client_migrate_hook in Services Client 7.2
Migrate old hook with mapping to new system.
Parameters
string $name: Hook machine name.
Throws
Exception When migration fails Exception is thrown with description error message.
1 call to services_client_migrate_hook()
- drush_services_client_migrate_hooks in ./
services_client.drush.inc - Migrate old system hooks to new event system.
File
- ./
services_client.legacy.inc, line 27 - Contains functions required for automated converting old Services Client version 1 hooks to events. This file is included only in drush command 'services-client-migrate-hooks'.
Code
function services_client_migrate_hook($name) {
$hook = db_query("SELECT * FROM {services_client_connection_hook} WHERE name = :name", array(
':name' => $name,
))
->fetch();
if (empty($hook)) {
throw new Exception("Specified hook name wasn't found.");
}
if (!empty($hook->config)) {
$hook->config = unserialize($hook->config);
}
elseif (!empty($hook->hook_mappings)) {
$hook->hook_mappings = unserialize($hook->hook_mappings);
}
if (!empty($hook->hook_conditions)) {
$hook->hook_conditions = unserialize($hook->hook_conditions);
}
// Define how to process legacy field map
$field_mapping = array();
$field_mapping_processor = function ($item) use (&$field_mapping) {
list($remote, $local) = explode("|", trim($item));
$field_mapping[trim($local)] = trim($remote);
};
// Define how to process legacy empty map
$field_empty_mapping = array();
$empty_mapping_processor = function ($item) use (&$field_empty_mapping) {
list($source, $destination, $value) = explode("|", trim($item));
$field_empty_mapping[trim($destination)] = trim($value);
};
$filter_remove_empty = function ($item) {
return !empty($item);
};
$node_type_mapping = NULL;
$conditions = array();
// Newer exportable format
if (!empty($hook->config)) {
array_map($field_mapping_processor, explode("\n", $hook->config['mapping']['config']['field_mapping']));
array_map($empty_mapping_processor, explode("\n", $hook->config['mapping']['config']['field_mapping_empty']));
if ($hook->hook == 'node_save' && !empty($hook->config['mapping']['config']['node_type_mapping'])) {
$node_type_mapping = explode("|", $hook->config['mapping']['config']['node_type_mapping']);
}
if (!empty($hook->config['condition']['config'])) {
$conditions = $hook->config['condition']['config'];
}
}
else {
array_map($field_mapping_processor, explode("\n", $hook->hook_mappings['field_mapping']));
array_map($empty_mapping_processor, explode("\n", $hook->hook_mappings['field_mapping_empty']));
if ($hook->hook == 'node_save' && !empty($hook->hook_mappings['node_type_mapping'])) {
$node_type_mapping = explode("|", $hook->hook_mappings['node_type_mapping']);
}
if (!empty($hook->hook_conditions)) {
$conditions = $hook->hook_conditions;
}
}
// Remove possible empty lines
$field_mapping = array_filter($field_mapping, $filter_remove_empty);
$field_empty_mapping = array_filter($field_empty_mapping, $filter_remove_empty);
ctools_include('export');
$event = ctools_export_crud_new('services_client_connection_event');
$event->connection = $hook->conn_name;
$event->name = $hook->name;
$event->title = $hook->title;
if ($hook->hook == 'node_save') {
$event->event = 'save';
$event->entity_type = 'node';
$event->plugin = 'NodeSaveHandler';
$handler = $event
->getHandler();
$config = $handler
->getConfiguration();
$config['uuid_resource'] = 'node';
$config['resource'] = 'node_raw';
if (!empty($node_type_mapping)) {
$config['node_type'] = $node_type_mapping[1];
}
$handler
->setConfiguration($config);
// Node type plugin
if (isset($conditions['node_type'])) {
$uuid = $handler
->addPlugin('condition', 'ServicesClientPropertyCondition');
$config = array(
'property' => 'type',
'condition' => 'equals',
'value' => $conditions['node_type'],
);
$handler
->setPluginConfig('condition', $uuid, $config);
}
services_client_migrate_add_mapping($handler, $field_mapping, $field_empty_mapping);
$event = $handler
->getEvent();
}
elseif ($hook->hook == 'node_delete') {
$event->event = 'delete';
$event->entity_type = 'node';
$event->plugin = 'EntityDeleteHandler';
$handler = $event
->getHandler();
$config = $handler
->getConfiguration();
$config['uuid_resource'] = 'node';
$config['resource'] = 'node';
$config['queue'] = 1;
if (!empty($node_type_mapping)) {
$config['node_type'] = $node_type_mapping[1];
}
$handler
->setConfiguration($config);
// Node type plugin
if (isset($conditions['node_type'])) {
$uuid = $handler
->addPlugin('condition', 'ServicesClientPropertyCondition');
$config = array(
'property' => 'type',
'condition' => 'equals',
'value' => $conditions['node_type'],
);
$handler
->setPluginConfig('condition', $uuid, $config);
}
services_client_migrate_add_mapping($handler, $field_mapping, $field_empty_mapping);
$event = $handler
->getEvent();
}
elseif ($hook->hook == 'user_save') {
$event->event = 'save';
$event->entity_type = 'user';
$event->plugin = 'UserSaveHandler';
$handler = $event
->getHandler();
$config = $handler
->getConfiguration();
$config['uuid_resource'] = 'user';
$config['resource'] = 'user_raw';
$config['user_sync_by_name'] = TRUE;
$config['user_map_roles'] = FALSE;
$config['user_map_roles_map'] = array();
if (!empty($hook->hook_mappings['user_sync_roles'])) {
$config['user_map_roles'] = TRUE;
$config['user_map_roles_map'] = array();
$roles = array_flip(user_roles(TRUE));
$roles_mapping = array();
array_map(function ($item) use (&$roles_mapping) {
list($local, $remote) = explode("|", trim($item));
$roles_mapping[trim($local)] = trim($remote);
}, explode("\n", trim($hook->hook_mappings['user_sync_roles'])));
foreach ($roles_mapping as $local => $remote) {
if (isset($roles[$local])) {
$config['user_map_roles_map'][] = array(
'local' => $roles[$local],
'remote' => $remote,
);
}
}
}
$handler
->setConfiguration($config);
services_client_migrate_add_mapping($handler, $field_mapping, $field_empty_mapping);
$event = $handler
->getEvent();
}
return $event;
}