function coder_upgrade_callback_hook_info in Coder 7
Same name and namespace in other branches
- 7.2 coder_upgrade/conversions/function.inc \coder_upgrade_callback_hook_info()
Updates hook_hook_info() arrays.
hook_hook_info() is now called hook_trigger_info(), and its return value has been changed and simplified.
@todo Database table {trigger_assignments} - 'op' field was removed, and the 'hook' field now contains the full function name.
Parameters
PGPNode $node: The node of the statement containing the array object.
PGPArray $array2: The array object containing the array element ($current2).
PGPNode $current2: The node object of the array element.
string $hook: The hook name.
string $type: The type (key or value) of the array element.
string $key: The key of the array element (or the most recent key).
string $value: The value of the array element (or NULL if element is a key).
File
- coder_upgrade/
conversions/ function.inc, line 1828 - Provides conversion routines applied to functions (or hooks).
Code
function coder_upgrade_callback_hook_info($node, &$array2, &$current2, $hook, $type, $key, $value) {
// DONE
cdp("inside " . __FUNCTION__);
if (!$current2 instanceof PGPNode) {
clp("ERROR: current2 is not a PGPNode object in hook_{$hook}");
return;
}
$editor = PGPEditor::getInstance();
/*
* Array levels
* - L0 return array(
* - L1 'node' => array(
* - L2 'nodeapi' => array(
* - L3 'presave' => array(
* - L4 'runs when' => t('When either saving a new post or updating an existing post'),
*/
// The keys of this array are the module (or content type) the hook pertains to.
if ($type == 'key') {
cdp("Found the module (or content type) key");
if (!$current2->data
->isType(T_CONSTANT_ENCAPSED_STRING)) {
clp("ERROR: key expression is not a string in hook_{$hook}");
return;
}
// This is the module (or content type) the hook pertains to.
// TODO Other prefixes may need to be modified.
switch ($key) {
case 'nodeapi':
$prefix = 'node';
break;
case 'taxonomy':
$prefix = 'taxonomy_term';
break;
default:
$prefix = $key;
break;
}
// Find the value element for this key.
if (!$array2
->findNextValue($current2)) {
clp("ERROR: did not find a value expression for the triggers key in hook_{$hook}");
return;
}
if (!$current2->data
->isType(T_ARRAY)) {
clp("ERROR: value expression is not a PGPArray object in hook_{$hook}");
return;
}
/*
* The triggers information element is an associative array doubly keyed by
* module name with its value being an array of action information. The new
* format combines the module name and action, eliminating one nested array.
* Example:
* 'node' => array(
* 'nodeapi' => array(
* 'presave' => array(
* 'runs when' => t('When either saving a new post or updating an existing post'),
* ),
* ),
* ),
*
* 'node' => array(
* 'node_presave' => array(
* 'label' => t('When either saving a new post or updating an existing post'),
* ),
* ),
*/
$triggers =& $current2->data
->getElement();
$trigger = $triggers->values
->first();
while ($trigger->next != NULL) {
if ($trigger->type == 'key') {
if (!$trigger->data
->isType(T_CONSTANT_ENCAPSED_STRING)) {
clp("ERROR: trigger key expression is not a string in hook_{$hook}");
return;
}
// This is the module (or content type) the hook pertains to.
// Concatenate prefix with key.
$suffix = trim($trigger->data
->toString(), "'\"");
$new_key = "'{$prefix}_{$suffix}'";
$trigger->data = $editor
->expressionToStatement($new_key);
}
elseif ($trigger->type == 'value') {
if (!$trigger->data
->isType(T_ARRAY)) {
clp("ERROR: trigger value expression is not a PGPArray object in hook_{$hook}");
return;
}
// This is the array of trigger information items.
// Currently, the only key is 'label' (formerly 'runs when').
$information_items =& $trigger->data
->getElement();
$information_items->multiline = 1;
$information_items->preserve = 0;
if (!$information_items
->changeKey('runs when', "'label'")) {
clp("ERROR: could not change 'runs when' key expression in hook_{$hook}");
clp($information_items
->toString());
return;
}
}
$trigger =& $trigger->next;
}
// Move up level 3 (triggers info) to level 2 (redundant module name) of the array.
$array2->values = $triggers->values;
// $array2->values = $array3->values;
/*
* Set array properties so the rewritten array:
* - has a comma after all values
* - is not indented one level too many
*/
$array2->count = $triggers->count;
$array2->commaCount = $triggers->count;
$array2->multiline = 1;
$array2->preserve = 0;
}
}