mailer project continued:
[mailer.git] / inc / callback-functions.php
index ecd9dec87d4d9a2b045e92bfec1ee570f4bcc76b..d6d2b927e52ec1bc0fa543f5ca3f1c61bdf24b5e 100644 (file)
@@ -16,7 +16,7 @@
  * $Author::                                                          $ *
  * -------------------------------------------------------------------- *
  * Copyright (c) 2003 - 2009 by Roland Haeder                           *
- * Copyright (c) 2009 - 2011 by Mailer Developer Team                   *
+ * Copyright (c) 2009 - 2012 by Mailer Developer Team                   *
  * For more information visit: http://mxchange.org                      *
  *                                                                      *
  * This program is free software; you can redistribute it and/or modify *
@@ -45,7 +45,7 @@ function doXmlAdminEntryMetaData ($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, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes, got ' . count($attributes));
        } // END - if
 }
 
@@ -54,25 +54,26 @@ function doXmlCallbackFunction ($resource, $attributes) {
        // There are two attributes, by default
        if (count($attributes) != 2) {
                // Not the right count
-               debug_report_bug(__FUNCTION__, __LINE__, 'Expected 2 attributes, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 2 attributes, got ' . count($attributes));
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        }
 
        // Add the function name and no attributes by default
        $GLOBALS['__XML_CALLBACKS']['callbacks'][] = __FUNCTION__;
        $GLOBALS['__XML_CALLBACKS']['functions'][__FUNCTION__][] = $attributes['VALUE'];
        $GLOBALS['__XML_ARGUMENTS'][__FUNCTION__] = array();
+       $GLOBALS['__COLUMN_INDEX'][__FUNCTION__] = 'column';
 }
 
 // Handles the XML node 'database-table'
@@ -80,30 +81,29 @@ function doXmlDatabaseTable ($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));
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the list
        addXmlValueToCallbackAttributes('database_table', $attributes);
-       //$GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['database_table'] = $attributes['VALUE'];
 }
 
 // Handles the XML node 'database-column-list'
@@ -111,7 +111,7 @@ function doXmlDatabaseColumnList ($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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
        } // END - if
 
        // Add an empty list
@@ -123,37 +123,37 @@ function doXmlDatabaseColumnListEntry ($resource, $attributes) {
        // There are three attributes, by default
        if (count($attributes) != 6) {
                // Not the right count
-               debug_report_bug(__FUNCTION__, __LINE__, 'Expected 6 attributes, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 6 attributes, got ' . count($attributes));
        } elseif (!isset($attributes['NAME'])) {
                // 'NAME' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
        } elseif (!isset($attributes['TABLE'])) {
                // 'TABLE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TABLE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute TABLE not found.');
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['TABLE'])) {
                // Not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute TABLE does not validate. TYPE=' . $attributes['TYPE'] . ',TABLE=' . $attributes['TABLE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute TABLE does not validate. TYPE=' . $attributes['TYPE'] . ',TABLE=' . $attributes['TABLE']);
        } elseif (!isset($attributes['ALIAS'])) {
                // 'ALIAS' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute ALIAS not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute ALIAS not found.');
        } elseif (!isset($attributes['FUNCTION'])) {
                // 'FUNCTION' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute FUNCTION not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute FUNCTION not found.');
        } elseif ((trim($attributes['ALIAS']) != '') && (!isXmlValueValid($attributes['TYPE'], $attributes['ALIAS']))) {
                // 'ALIAS' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute ALIAS does not validate. ALIAS=' . $attributes['ALIAS']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute ALIAS does not validate. ALIAS=' . $attributes['ALIAS']);
        } elseif ((trim($attributes['FUNCTION']) != '') && (!isXmlValueValid($attributes['TYPE'], $attributes['FUNCTION']))) {
                // 'FUNCTION' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute FUNCTION does not validate. FUNCTION=' . $attributes['FUNCTION']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute FUNCTION does not validate. FUNCTION=' . $attributes['FUNCTION']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['column_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/database-column-list not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/database-column-list not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the list
@@ -165,7 +165,7 @@ 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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
        } // END - if
 
        // Add an empty list
@@ -177,25 +177,25 @@ 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));
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['callback_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/callback-function-list not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/callback-function-list not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the list
@@ -207,7 +207,7 @@ 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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
        } // END - if
 
        // Add an empty list
@@ -219,40 +219,94 @@ 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));
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['extra_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/extra-parameter-list not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node 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 'time-columns-list'
+function doXmlTimeColumnsList ($resource, $attributes) {
+       // There should be no attributes
+       if (count($attributes) > 0) {
+               // Please don't add any attributes to foo-list nodes
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
+       } // END - if
+
+       // Add an empty list
+       $GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['time_columns'] = array();
+}
+
+// Handles the XML node 'time-columns-list-entry'
+function doXmlTimeColumnsListEntry ($resource, $attributes) {
+       // There are three attributes, by default
+       if (count($attributes) != 3) {
+               // Not the right count
+               reportBug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
+       } elseif (!isset($attributes['NAME'])) {
+               // 'NAME' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
+       } elseif (!isset($attributes['TYPE'])) {
+               // 'TYPE' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+       } elseif (!isInvalidXmlType($attributes['TYPE'])) {
+               // No valid type
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
+       } elseif (!isset($attributes['VALUE'])) {
+               // 'VALUE' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+       } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
+               // Not valid/verifyable
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
+       } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['time_columns'])) {
+               // doXmlCallbackFunction is missing
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/extra-parameter-list not included around this node. Please fix your XML.');
+       }
+
+       // Add the entry to the list
+       addXmlValueToCallbackAttributes('time_columns', $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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['extra_list']['member_list'])) {
                // This list should be created already
-               debug_report_bug(__FUNCTION__, __LINE__, 'member_list should be already created.');
+               reportBug(__FUNCTION__, __LINE__, 'member_list should be already created.');
+       }
+}
+
+// Handles the XML node 'extra-parameter-reload-list'
+function doXmlExtraParameterReloadList ($resource, $attributes) {
+       // There should be no attributes
+       if (count($attributes) > 0) {
+               // Please don't add any attributes to foo-list nodes
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
+       } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['extra_list']['reload_list'])) {
+               // This list should be created already
+               reportBug(__FUNCTION__, __LINE__, 'reload_list should be already created.');
        }
 }
 
@@ -261,40 +315,70 @@ 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));
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['extra_list']['member_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/extra-parameter-list/member-list not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node 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 'extra-parameter-reload-list-entry'
+function doXmlExtraParameterReloadListEntry ($resource, $attributes) {
+       // There are three attributes, by default
+       if (count($attributes) != 3) {
+               // Not the right count
+               reportBug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
+       } elseif (!isset($attributes['NAME'])) {
+               // 'NAME' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
+       } elseif (!isset($attributes['TYPE'])) {
+               // 'TYPE' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+       } elseif (!isInvalidXmlType($attributes['TYPE'])) {
+               // No valid type
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
+       } elseif (!isset($attributes['VALUE'])) {
+               // 'VALUE' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+       } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
+               // Not valid/verifyable
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
+       } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['extra_list']['reload_list'])) {
+               // doXmlCallbackFunction is missing
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/extra-parameter-list/reload-list not included around this node. Please fix your XML.');
+       }
+
+       // Add the entry to the list
+       addXmlValueToCallbackAttributes('extra_list', $attributes, 'reload_list');
+}
+
 // Handles the XML node 'extra-parameter-added-list'
 function doXmlExtraParameterAddedList ($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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['extra_list']['added_list'])) {
                // This list should be created already
-               debug_report_bug(__FUNCTION__, __LINE__, 'added_list should be already created.');
+               reportBug(__FUNCTION__, __LINE__, 'added_list should be already created.');
        }
 }
 
@@ -303,55 +387,97 @@ function doXmlExtraParameterAddedListEntry ($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));
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['extra_list']['added_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/extra-parameter-list/added-list not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/extra-parameter-list/added-list not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the list
        addXmlValueToCallbackAttributes('extra_list', $attributes, 'added_list');
 }
 
+// Handles the XML node 'extra-parameter-created-list'
+function doXmlExtraParameterCreatedList ($resource, $attributes) {
+       // There should be no attributes
+       if (count($attributes) > 0) {
+               // Please don't add any attributes to foo-list nodes
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
+       } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['extra_list']['created_list'])) {
+               // This list should be created already
+               reportBug(__FUNCTION__, __LINE__, 'created_list should be already created.');
+       }
+}
+
+// Handles the XML node 'extra-parameter-created-list-entry'
+function doXmlExtraParameterCreatedListEntry ($resource, $attributes) {
+       // There are three attributes, by default
+       if (count($attributes) != 3) {
+               // Not the right count
+               reportBug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
+       } elseif (!isset($attributes['NAME'])) {
+               // 'NAME' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
+       } elseif (!isset($attributes['TYPE'])) {
+               // 'TYPE' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+       } elseif (!isInvalidXmlType($attributes['TYPE'])) {
+               // No valid type
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
+       } elseif (!isset($attributes['VALUE'])) {
+               // 'VALUE' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+       } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
+               // Not valid/verifyable
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
+       } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['extra_list']['created_list'])) {
+               // doXmlCallbackFunction is missing
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/extra-parameter-list/created-list not included around this node. Please fix your XML.');
+       }
+
+       // Add the entry to the list
+       addXmlValueToCallbackAttributes('extra_list', $attributes, 'created_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));
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the list
@@ -363,10 +489,10 @@ 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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['status_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/status-list not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/status-list not included around this node. Please fix your XML.');
        }
 }
 
@@ -375,28 +501,28 @@ 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));
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['status_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/extra-parameter-list/change-list not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/extra-parameter-list/change-list not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the list
@@ -408,30 +534,29 @@ 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));
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the list
        addXmlValueToCallbackAttributes('enable_modify_entries', $attributes);
-       //$GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['enable_modify_entries'] = convertStringToBoolean($attributes['VALUE']);
 }
 
 // Handles the XML node 'table-id-column'
@@ -439,30 +564,29 @@ 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));
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the array
        addXmlValueToCallbackAttributes('table_id_column', $attributes);
-       //$GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['table_id_column'] = $attributes['VALUE'];
 }
 
 // Handles the XML node 'table-userid-column'
@@ -470,30 +594,29 @@ 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));
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the array
        addXmlValueToCallbackAttributes('table_userid_column', $attributes);
-       //$GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['table_userid_column'] = $attributes['VALUE'];
 }
 
 // Handles the XML node 'raw-userid-column-key'
@@ -501,30 +624,59 @@ 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));
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the array
        addXmlValueToCallbackAttributes('raw_userid_column_key', $attributes);
-       //$GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['raw_userid_column_key'] = $attributes['VALUE'];
+}
+
+// Handles the XML node 'cache-file'
+function doXmlCacheFile ($resource, $attributes) {
+       // There are three attributes, by default
+       if (count($attributes) != 3) {
+               // Not the right count
+               reportBug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
+       } elseif (!isset($attributes['NAME'])) {
+               // 'NAME' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
+       } elseif (!isset($attributes['TYPE'])) {
+               // 'TYPE' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+       } elseif (!isInvalidXmlType($attributes['TYPE'])) {
+               // No valid type
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
+       } elseif (!isset($attributes['VALUE'])) {
+               // 'VALUE' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+       } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
+               // Not valid/verifyable
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
+       } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
+               // doXmlCallbackFunction is missing
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+       }
+
+       // Add the entry to the array
+       addXmlValueToCallbackAttributes('cache_file', $attributes);
 }
 
 //-----------------------------------------------------------------------------
@@ -536,7 +688,7 @@ function doXmlAdminListData ($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, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes, got ' . count($attributes));
        } // END - if
 }
 
@@ -545,7 +697,7 @@ function doXmlDataTables ($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, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes, got ' . count($attributes));
        } // END - if
 }
 
@@ -554,28 +706,28 @@ function doXmlDataTable ($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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
        } elseif (!isset($attributes['VALUE'])) {
                // 'VALUE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
        } elseif (!isset($attributes['ALIAS'])) {
                // 'ALIAS' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute ALIAS not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute ALIAS not found.');
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
                // Not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
        } elseif ((trim($attributes['ALIAS']) != '') && (!isXmlValueValid($attributes['TYPE'], $attributes['ALIAS']))) {
                // Not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. ALIAS=' . $attributes['ALIAS']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. ALIAS=' . $attributes['ALIAS']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the array
@@ -587,10 +739,10 @@ function doXmlSelectDataFromList ($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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['data_table'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-table not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-table not included around this node. Please fix your XML.');
        }
 
        // Add an empty list
@@ -602,34 +754,34 @@ function doXmlSelectDataFromListEntry ($resource, $attributes) {
        // There are five attributes, by default
        if (count($attributes) != 5) {
                // Not the right count
-               debug_report_bug(__FUNCTION__, __LINE__, 'Expected 5 attributes, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 5 attributes, got ' . count($attributes));
        } elseif (!isset($attributes['VALUE'])) {
                // 'VALUE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
        } elseif (!isset($attributes['ALIAS'])) {
                // 'ALIAS' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute ALIAS not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute ALIAS not found.');
        } elseif (!isset($attributes['FUNCTION'])) {
                // 'FUNCTION' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute FUNCTION not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute FUNCTION not found.');
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
                // 'VALUE' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
        } elseif ((trim($attributes['ALIAS']) != '') && (!isXmlValueValid($attributes['TYPE'], $attributes['ALIAS']))) {
                // 'ALIAS' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute ALIAS does not validate. ALIAS=' . $attributes['ALIAS']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute ALIAS does not validate. ALIAS=' . $attributes['ALIAS']);
        } elseif ((trim($attributes['FUNCTION']) != '') && (!isXmlValueValid($attributes['TYPE'], $attributes['FUNCTION']))) {
                // 'FUNCTION' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute FUNCTION does not validate. FUNCTION=' . $attributes['FUNCTION']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute FUNCTION does not validate. FUNCTION=' . $attributes['FUNCTION']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['data_column_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/select-data-from-list not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/select-data-from-list not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the array
@@ -641,10 +793,10 @@ function doXmlWhereSelectFromList ($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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['data_table'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-table not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-table not included around this node. Please fix your XML.');
        }
 
        // Add an empty list
@@ -656,58 +808,82 @@ function doXmlWhereSelectFromListEntry ($resource, $attributes) {
        // There are five attributes, by default
        if (count($attributes) != 5) {
                // Not the right count
-               debug_report_bug(__FUNCTION__, __LINE__, 'Expected 5 attributes, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 5 attributes, got ' . count($attributes));
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
        } elseif (!isset($attributes['TABLE'])) {
                // 'TABLE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TABLE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute TABLE not found.');
        } elseif (!isset($attributes['VALUE'])) {
                // 'VALUE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
        } elseif (!isset($attributes['CONDITION'])) {
                // 'CONDITION' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute CONDITION not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute CONDITION not found.');
        } elseif (!isset($attributes['LOOK-FOR'])) {
                // 'LOOK-FOR' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute LOOK-FOR not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute LOOK-FOR not found.');
        } elseif (!isInvalidXmlType($attributes['TYPE'])) {
                // No valid type
-               debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
        } elseif ((trim($attributes['TABLE']) != '') && (!isXmlValueValid($attributes['TYPE'], $attributes['TABLE']))) {
                // 'TABLE' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute TABLE does not validate. TABLE=' . $attributes['TABLE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute TABLE does not validate. TABLE=' . $attributes['TABLE']);
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
                // 'VALUE' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['CONDITION'])) {
                // 'CONDITION' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute CONDITION does not validate. CONDITION=' . $attributes['CONDITION']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute CONDITION does not validate. CONDITION=' . $attributes['CONDITION']);
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['LOOK-FOR'])) {
                // 'LOOK-FOR' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute LOOK-FOR does not validate. LOOK-FOR=' . $attributes['LOOK-FOR']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute LOOK-FOR does not validate. LOOK-FOR=' . $attributes['LOOK-FOR']);
        } elseif (!isXmlConditionValid($attributes['CONDITION'])) {
                // 'CONDITION' is not known
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute CONDITION is not valid. LOOK-FOR=' . $attributes['CONDITION']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute CONDITION is not valid. LOOK-FOR=' . $attributes['CONDITION']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['data_column_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-column-list not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-column-list not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the array
        addXmlValueToCallbackAttributes('where_select_list', $attributes);
 }
 
+// Handles the XML node 'where-condition'
+function doXmlWhereCondition ($resource, $attributes) {
+       // There are two attributes, by default
+       if (count($attributes) != 3) {
+               // Please don't add any attributes to foo-list nodes
+               reportBug(__FUNCTION__, __LINE__, 'Expected 2 attributes because this is a where-condition node, got ' . count($attributes));
+       } elseif (!isset($attributes['TYPE'])) {
+               // 'TYPE' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+       } elseif (!isset($attributes['CONDITION'])) {
+               // 'CONDITION' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute CONDITION not found.');
+       } elseif (!isset($attributes['NAME'])) {
+               // 'NAME' not found
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute NAME not found.');
+       } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['data_table'])) {
+               // doXmlCallbackFunction is missing
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-table not included around this node. Please fix your XML.');
+       }
+
+       // Add an empty list
+       addXmlValueToCallbackAttributes('where_condition', $attributes);
+}
+
 // Handles the XML node 'order-by-list'
 function doXmlOrderByList ($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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['data_table'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-table not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-table not included around this node. Please fix your XML.');
        }
 
        // Add an empty list
@@ -719,34 +895,34 @@ function doXmlOrderByListEntry ($resource, $attributes) {
        // There are four attributes, by default
        if (count($attributes) != 4) {
                // Not the right count
-               debug_report_bug(__FUNCTION__, __LINE__, 'Expected 5 attributes, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 5 attributes, got ' . count($attributes));
        } elseif (!isset($attributes['ORDER'])) {
                // 'ORDER' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute ORDER not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute ORDER not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
        } elseif (!isset($attributes['TABLE'])) {
                // 'TABLE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TABLE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute TABLE not found.');
        } elseif (!isset($attributes['VALUE'])) {
                // 'VALUE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
        } elseif (!isInvalidXmlType($attributes['TYPE'])) {
                // No valid type
-               debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['ORDER'])) {
                // 'ORDER' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute ORDER does not validate. ORDER=' . $attributes['ORDER']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute ORDER does not validate. ORDER=' . $attributes['ORDER']);
        } elseif ((trim($attributes['TABLE']) != '') && (!isXmlValueValid($attributes['TYPE'], $attributes['TABLE']))) {
                // 'TABLE' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute TABLE does not validate. TABLE=' . $attributes['TABLE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute TABLE does not validate. TABLE=' . $attributes['TABLE']);
        } elseif ((trim($attributes['VALUE']) != '') && (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE']))) {
                // 'VALUE' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['data_column_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-column-list not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-column-list not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the array
@@ -758,22 +934,22 @@ function doXmlListTemplate ($resource, $attributes) {
        // There are two attributes, by default
        if (count($attributes) != 2) {
                // Not the right count
-               debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
        } elseif (!isset($attributes['VALUE'])) {
                // 'VALUE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
                // Not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the array
@@ -785,22 +961,22 @@ function doXmlListRowTemplate ($resource, $attributes) {
        // There are two attributes, by default
        if (count($attributes) != 2) {
                // Not the right count
-               debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
        } elseif (!isset($attributes['VALUE'])) {
                // 'VALUE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
                // Not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the array
@@ -812,10 +988,10 @@ function doXmlColumnCallbackList ($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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['data_table'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-table not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/data-table not included around this node. Please fix your XML.');
        }
 
        // Add an empty list
@@ -827,10 +1003,10 @@ function doXmlColumnCallbackListEntry ($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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 0 attributes because this is a foo-list node, got ' . count($attributes));
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['column_callback_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/column-callback not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/column-callback not included around this node. Please fix your XML.');
        }
 }
 
@@ -839,28 +1015,28 @@ function doXmlColumnCallbackData ($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));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
        } elseif (!isset($attributes['VALUE'])) {
                // 'VALUE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
        } elseif (!isset($attributes['CALLBACK'])) {
                // 'CALLBACK' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute CALLBACK not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute CALLBACK not found.');
        } elseif (!isInvalidXmlType($attributes['TYPE'])) {
                // No valid type
-               debug_report_bug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
                // Not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
        } elseif ((trim($attributes['CALLBACK']) != '') && (!isXmlValueValid($attributes['TYPE'], $attributes['CALLBACK']))) {
                // 'CALLBACK' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute CALLBACK does not validate. CALLBACK=' . $attributes['CALLBACK']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute CALLBACK does not validate. CALLBACK=' . $attributes['CALLBACK']);
        }
 
        // Add the entry to the array
@@ -872,10 +1048,10 @@ function doXmlCallbackExtraParameterList ($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 1 attributes because this is a named foo-list node, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 1 attributes because this is a named foo-list node, got ' . count($attributes));
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['column_callback_list'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/column-callback-list not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/column-callback-list not included around this node. Please fix your XML.');
        } elseif (isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['__EXTRA_PARAMETER'])) {
                // Abort silently here, no one wants to kill this array
                return;
@@ -890,25 +1066,25 @@ function doXmlCallbackExtraParameterListEntry ($resource, $attributes) {
        // There are three attributes, by default
        if (count($attributes) != 3) {
                // Not the right count
-               debug_report_bug(__FUNCTION__, __LINE__, 'Expected 5 attributes, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 5 attributes, got ' . count($attributes));
        } elseif (!isset($attributes['COLUMN'])) {
                // 'COLUMN' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute COLUMN not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute COLUMN not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__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.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
                // 'VALUE' not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction']['__EXTRA_PARAMETER'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function/__EXTRA_PARAMETER not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function/__EXTRA_PARAMETER not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the array
@@ -920,22 +1096,22 @@ function doXmlNoEntryFoundMessage ($resource, $attributes) {
        // There are two attributes, by default
        if (count($attributes) != 2) {
                // Not the right count
-               debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
+               reportBug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
        } elseif (!isset($attributes['VALUE'])) {
                // 'VALUE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
+               reportBug(__FUNCTION__, __LINE__, 'Required attribute VALUE not found.');
        } elseif (!isset($attributes['TYPE'])) {
                // 'TYPE' not found
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TYPE not found.');
+               reportBug(__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']);
+               reportBug(__FUNCTION__, __LINE__, 'TYPE is not valid, got: ' . $attributes['TYPE']);
        } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['VALUE'])) {
                // Not valid/verifyable
-               debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
+               reportBug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. VALUE=' . $attributes['VALUE']);
        } elseif (!isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'])) {
                // doXmlCallbackFunction is missing
-               debug_report_bug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
+               reportBug(__FUNCTION__, __LINE__, 'Required XML node callback-function not included around this node. Please fix your XML.');
        }
 
        // Add the entry to the array
@@ -1059,6 +1235,10 @@ function addXmlValueToCallbackAttributes ($element, $attributes, $extraKey = '',
 
                //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'element=' . $element . ',extraKey=' . $extraKey . ',TYPE=' . $attributes['TYPE'] . ',CONDITION[' . gettype($attributes['CONDITION']) . ']=' . $attributes['CONDITION'] . ',LOOK-FOR[' . gettype($attributes['LOOK-FOR']) . ']=' . $attributes['LOOK-FOR'] . ' - CONDITION! (VALUE=' . $attributes['VALUE'] . ')');
                $GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'][$element][] = $array;
+       } elseif ((isset($attributes['CONDITION'])) && (isset($attributes['NAME']))) {
+               // CONDITION/NAME detected
+               //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'element=' . $element . ',extraKey=' . $extraKey . ',TYPE=' . $attributes['TYPE'] . ',CONDITION[' . gettype($attributes['CONDITION']) . ']=' . $attributes['CONDITION'] . ',NAME[' . gettype($attributes['NAME']) . ']=' . $attributes['NAME'] . ' - CONDITION!');
+               $GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'][$element][$attributes['NAME']] = $attributes['CONDITION'];
        } elseif (isset($attributes['CALLBACK'])) {
                // CALLBACK/VALUE detected
                //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'element=' . $element . ',extraKey=' . $extraKey . ',TYPE=' . $attributes['TYPE'] . ',CALLBACK[' . gettype($attributes['CALLBACK']) . ']=' . $attributes['CALLBACK'] . ' - CALLBACK! (VALUE=' . $attributes['VALUE'] . ')');
@@ -1077,7 +1257,7 @@ function addXmlValueToCallbackAttributes ($element, $attributes, $extraKey = '',
                $GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'][$element][] = $attributes['VALUE'];
        } elseif (isset($GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'][$element][$attributes['NAME']])) {
                // Already created
-               debug_report_bug(__FUNCTION__, __LINE__, 'NAME=' . $attributes['NAME'] . ' already addded to ' . $element . ' attributes=<pre>' . print_r($attributes, true) . '</pre>');
+               reportBug(__FUNCTION__, __LINE__, 'NAME=' . $attributes['NAME'] . ' already addded to ' . $element . ' attributes=<pre>' . print_r($attributes, true) . '</pre>');
        } else {
                // Use from NAME
                //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'element=' . $element . ',NAME=' . $attributes['NAME'] . ',VALUE[' . gettype($attributes['VALUE']) . ']=' . $attributes['VALUE'] . ' - NAME!');
@@ -1091,7 +1271,7 @@ function addXmlValueToCallbackAttributes ($element, $attributes, $extraKey = '',
 //-----------------------------------------------------------------------------
 
 // Execute function for doXmlCallbackFunction()
-function doXmlCallbackFunctionExecute ($callbackFunction, $args) {
+function doXmlCallbackFunctionExecute ($callbackName, $args, $columnIndex) {
        // Is 'id_index' set and form sent?
        if ((isset($args['id_index'])) && (isFormSent())) {
                // Prepare 'id_index'
@@ -1099,8 +1279,8 @@ function doXmlCallbackFunctionExecute ($callbackFunction, $args) {
        } // END - if
 
        // Just call it
-       //* DEBUG: */ die('callbackFunction=' . $callbackFunction . ',args=<pre>'.print_r($args, true).'</pre>');
-       call_user_func_array($callbackFunction, $args);
+       //* DEBUG: */ die('callbackFunction=' . $callbackName . ',columnIndex=' . $columnIndex . ',args=<pre>'.print_r($args, true).'</pre>');
+       call_user_func_array($callbackName, $args);
 }
 
 // [EOF]