0) { // Please don't add any attributes to foo-list nodes debug_report_bug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes)); } // END - if // Add an empty list $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['column_list'] = array(); } // Handles the XML node 'database-column-list-entry' function doXmlDatabaseColumnListEntry ($resource, $attributes) { // There are three attributes, by default if (count($attributes) != 3) { // Not the right count debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes)); } elseif (!isset($attributes['NAME'])) { // 'NAME' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.'); } elseif (!isset($attributes['TYPE'])) { // 'TYPE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.'); } elseif (!isInvalidXmlType($attributes['TYPE'])) { // No valid type debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']); } elseif (!isset($attributes['VALUE'])) { // 'VALUE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.'); } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) { // Not valid/verifyable debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['column_list'])) { // doXmlAdminCallbackFunction is missing debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node admin-callback-function/database-column-list not included around this node. Please fix your XML.'); } // Add the entry to the list addXmlValueToCallbackAttributes('column_list', $attributes); } // Handles the XML node 'callback-function-list' function doXmlCallbackFunctionList ($resource, $attributes) { // There should be no attributes if (count($attributes) > 0) { // Please don't add any attributes to foo-list nodes debug_report_bug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes)); } // END - if // Add an empty list $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['callback_list'] = array(); } // Handles the XML node 'callback-function-list-entry' function doXmlCallbackFunctionListEntry ($resource, $attributes) { // There are three attributes, by default if (count($attributes) != 3) { // Not the right count debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes)); } elseif (!isset($attributes['NAME'])) { // 'NAME' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.'); } elseif (!isset($attributes['TYPE'])) { // 'TYPE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.'); } elseif (!isInvalidXmlType($attributes['TYPE'])) { // No valid type debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']); } elseif (!isset($attributes['VALUE'])) { // 'VALUE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.'); } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) { // Not valid/verifyable debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['callback_list'])) { // doXmlAdminCallbackFunction is missing debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node admin-callback-function/callback-function-list not included around this node. Please fix your XML.'); } // Add the entry to the list addXmlValueToCallbackAttributes('callback_list', $attributes); } // Handles the XML node 'extra-parameter-list' function doXmlExtraParameterList ($resource, $attributes) { // There should be no attributes if (count($attributes) > 0) { // Please don't add any attributes to foo-list nodes debug_report_bug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes)); } // END - if // Add an empty list $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['extra_list'] = array(); } // Handles the XML node 'extra-parameter-list-entry' function doXmlExtraParameterListEntry ($resource, $attributes) { // There are three attributes, by default if (count($attributes) != 3) { // Not the right count debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes)); } elseif (!isset($attributes['NAME'])) { // 'NAME' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.'); } elseif (!isset($attributes['TYPE'])) { // 'TYPE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.'); } elseif (!isInvalidXmlType($attributes['TYPE'])) { // No valid type debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']); } elseif (!isset($attributes['VALUE'])) { // 'VALUE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.'); } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) { // Not valid/verifyable debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['extra_list'])) { // doXmlAdminCallbackFunction is missing debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node admin-callback-function/extra-parameter-list not included around this node. Please fix your XML.'); } // Add the entry to the list addXmlValueToCallbackAttributes('extra_list', $attributes); } // Handles the XML node 'extra-parameter-member-list' function doXmlExtraParameterMemberList ($resource, $attributes) { // There should be no attributes if (count($attributes) > 0) { // Please don't add any attributes to foo-list nodes debug_report_bug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes)); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['extra_list']['member_list'])) { // This list should be created already debug_report_bug(__FUNCTION__, __LINE__, 'member_list should be already created.'); } } // Handles the XML node 'extra-parameter-member-list-entry' function doXmlExtraParameterMemberListEntry ($resource, $attributes) { // There are three attributes, by default if (count($attributes) != 3) { // Not the right count debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes)); } elseif (!isset($attributes['NAME'])) { // 'NAME' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.'); } elseif (!isset($attributes['TYPE'])) { // 'TYPE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.'); } elseif (!isInvalidXmlType($attributes['TYPE'])) { // No valid type debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']); } elseif (!isset($attributes['VALUE'])) { // 'VALUE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.'); } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) { // Not valid/verifyable debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['extra_list']['member_list'])) { // doXmlAdminCallbackFunction is missing debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node admin-callback-function/extra-parameter-list/member-list not included around this node. Please fix your XML.'); } // Add the entry to the list addXmlValueToCallbackAttributes('extra_list', $attributes, 'member_list'); } // Handles the XML node 'status-change-column' function doXmlStatusChangeColumn ($resource, $attributes) { // There are three attributes, by default if (count($attributes) != 3) { // Not the right count debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes)); } elseif (!isset($attributes['NAME'])) { // 'NAME' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.'); } elseif (!isset($attributes['TYPE'])) { // 'TYPE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.'); } elseif (!isInvalidXmlType($attributes['TYPE'])) { // No valid type debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']); } elseif (!isset($attributes['VALUE'])) { // 'VALUE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.'); } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) { // Not valid/verifyable debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'])) { // doXmlAdminCallbackFunction is missing debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node admin-callback-function not included around this node. Please fix your XML.'); } // Add the entry to the list $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['status_list'][$attributes['VALUE']] = array(); } // Handles the XML node 'status-change-list' function doXmlStatusChangeList ($resource, $attributes) { // There should be no attributes if (count($attributes) > 0) { // Please don't add any attributes to foo-list nodes debug_report_bug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes)); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['status_list'])) { // doXmlAdminCallbackFunction is missing debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node admin-callback-function/status-list not included around this node. Please fix your XML.'); } } // Handles the XML node 'status-change-list-entry' function doXmlStatusChangeListEntry ($resource, $attributes) { // There are for attributes, by default if (count($attributes) != 4) { // Not the right count debug_report_bug(__FUNCTION__, __LINE__, 'Expected 4 attributes, got ' . count($attributes)); } elseif (!isset($attributes['NAME'])) { // 'NAME' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.'); } elseif (!isset($attributes['TYPE'])) { // 'TYPE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.'); } elseif (!isInvalidXmlType($attributes['TYPE'])) { // No valid type debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']); } elseif (!isset($attributes['VALUE'])) { // 'VALUE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.'); } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['OLD'])) { // Not valid/verifyable debug_report_bug(__FUNCTION__, __LINE__, 'Attribute OLD does not validate. TYPE=' . $attributes['TYPE'] . ',OLD=' . $attributes['OLD']); } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) { // Not valid/verifyable debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['status_list'])) { // doXmlAdminCallbackFunction is missing debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node admin-callback-function/extra-parameter-list/member-list not included around this node. Please fix your XML.'); } // Add the entry to the list addXmlValueToCallbackAttributes('status_list', $attributes, $attributes['NAME'], 'OLD'); } // Handles the XML node 'enable-modify-entries' function doXmlEnableModifyEntries ($resource, $attributes) { // There are three attributes, by default if (count($attributes) != 3) { // Not the right count debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes)); } elseif (!isset($attributes['NAME'])) { // 'NAME' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.'); } elseif (!isset($attributes['TYPE'])) { // 'TYPE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.'); } elseif (!isInvalidXmlType($attributes['TYPE'])) { // No valid type debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']); } elseif (!isset($attributes['VALUE'])) { // 'VALUE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.'); } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) { // Not valid/verifyable debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'])) { // doXmlAdminCallbackFunction is missing debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node admin-callback-function not included around this node. Please fix your XML.'); } // Add the entry to the array $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['enable_modify_entries'] = convertStringToBoolean($attributes['VALUE']); } // Handles the XML node 'table-id-column' function doXmlTableIdColumn ($resource, $attributes) { // There are three attributes, by default if (count($attributes) != 3) { // Not the right count debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes)); } elseif (!isset($attributes['NAME'])) { // 'NAME' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.'); } elseif (!isset($attributes['TYPE'])) { // 'TYPE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.'); } elseif (!isInvalidXmlType($attributes['TYPE'])) { // No valid type debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']); } elseif (!isset($attributes['VALUE'])) { // 'VALUE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.'); } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) { // Not valid/verifyable debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'])) { // doXmlAdminCallbackFunction is missing debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node admin-callback-function not included around this node. Please fix your XML.'); } // Add the entry to the array $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['table_id_column'] = $attributes['VALUE']; } // Handles the XML node 'table-userid-column' function doXmlTableUseridColumn ($resource, $attributes) { // There are three attributes, by default if (count($attributes) != 3) { // Not the right count debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes)); } elseif (!isset($attributes['NAME'])) { // 'NAME' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.'); } elseif (!isset($attributes['TYPE'])) { // 'TYPE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.'); } elseif (!isInvalidXmlType($attributes['TYPE'])) { // No valid type debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']); } elseif (!isset($attributes['VALUE'])) { // 'VALUE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.'); } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) { // Not valid/verifyable debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'])) { // doXmlAdminCallbackFunction is missing debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node admin-callback-function not included around this node. Please fix your XML.'); } // Add the entry to the array $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['table_userid_column'] = $attributes['VALUE']; } // Handles the XML node 'raw-userid-column-key' function doXmlRawUseridColumnKey ($resource, $attributes) { // There are three attributes, by default if (count($attributes) != 3) { // Not the right count debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes)); } elseif (!isset($attributes['NAME'])) { // 'NAME' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.'); } elseif (!isset($attributes['TYPE'])) { // 'TYPE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.'); } elseif (!isInvalidXmlType($attributes['TYPE'])) { // No valid type debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']); } elseif (!isset($attributes['VALUE'])) { // 'VALUE' not found debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.'); } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) { // Not valid/verifyable debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']); } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'])) { // doXmlAdminCallbackFunction is missing debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node admin-callback-function not included around this node. Please fix your XML.'); } // Add the entry to the array $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction']['raw_userid_column_key'] = $attributes['VALUE']; } // ---------------------------------------------------------------------------- // XML type validation // ---------------------------------------------------------------------------- // Checks for string without any added extra data function isXmlTypeString ($value) { // Just let SQL_ESCAPE() do the job return ($value == SQL_ESCAPE($value)); } // Fake-check for array type function isXmlTypeArray ($value) { // This value is always a string return (is_string($value)); } // Check for boolean type function isXmlTypeBool ($value) { // Trim value $value = trim($value); // This value is always a string return (($value == 'true') || ($value == 'false')); } // ---------------------------------------------------------------------------- // Private XML functions // ---------------------------------------------------------------------------- // Adds given attribut to element function addXmlValueToCallbackAttributes ($element, $attributes, $extraKey = '', $key = '') { if ($attributes['TYPE'] == 'array') { // Another nested array /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'TYPE=ARRAY, element=' . $element); $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'][$element][$attributes['VALUE'] . '_list'] = array(); } elseif (!empty($extraKey)) { // Is it bool? if ($attributes['TYPE'] == 'bool') { // Then convert VALUE $attributes['VALUE'] = convertStringToBoolean($attributes['VALUE']); } // END - if // Sub-array (one level only) /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'element=' . $element . ',extraKey=' . $extraKey . ',TYPE='.$attributes['TYPE'].',VALUE[' . gettype($attributes['VALUE']) . ']=' . $attributes['VALUE']); if (trim($attributes['NAME']) == '') { // Numerical index /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'element=' . $element . ',extraKey=' . $extraKey . ',TYPE='.$attributes['TYPE'].',VALUE[' . gettype($attributes['VALUE']) . ']=' . $attributes['VALUE'] . ' - NUMERICAL!'); $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'][$element][$extraKey][] = $attributes['VALUE']; } elseif (!empty($key)) { // Use from $key /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'element=' . $element . ',extraKey=' . $extraKey . ',TYPE='.$attributes['TYPE'].',VALUE[' . gettype($attributes['VALUE']) . ']=' . $attributes['VALUE'] . ' - KEY! (key=' . $attributes[$key] . ')'); $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'][$element][$extraKey][$attributes[$key]] = $attributes['VALUE']; } else { // Use from NAME /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'element=' . $element . ',extraKey=' . $extraKey . ',TYPE='.$attributes['TYPE'].',VALUE[' . gettype($attributes['VALUE']) . ']=' . $attributes['VALUE'] . ' - NAME! (name=' . $attributes['NAME'] . ')'); $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'][$element][$extraKey][$attributes['NAME']] = $attributes['VALUE']; } } elseif (trim($attributes['NAME']) == '') { // Numerical index /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'element=' . $element . ',VALUE[' . gettype($attributes['VALUE']) . ']=' . $attributes['VALUE']); $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'][$element][] = $attributes['VALUE']; } elseif (isset($GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'][$element][$attributes['NAME']])) { // Already created debug_report_bug(__FUNCTION__, __LINE__, 'NAME=' . $attributes['NAME'] . ' already addded to ' . $element . '.'); } else { // Use from NAME /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'element=' . $element . ',NAME=' . $attributes['NAME'] . ',VALUE[' . gettype($attributes['VALUE']) . ']=' . $attributes['VALUE']); $GLOBALS['__XML_ARGUMENTS']['doXmlAdminCallbackFunction'][$element][$attributes['NAME']] = $attributes['VALUE']; } } // ---------------------------------------------------------------------------- // Execute call-back functions // ---------------------------------------------------------------------------- // Execute function for doXmlAdminCallbackFunction() function doXmlAdminCallbackFunctionExecute ($function, $args) { // Prepare 'id_index' $args['id_index'] = postRequestParameter($args['id_index']); // Just call it //* DEBUG: */ die('
'.print_r($args, true).'
'); call_user_func_array($function, $args); } // [EOF] ?>