// Handles the XML node 'database-column-list-entry'
function doXmlDatabaseColumnListEntry ($resource, $attributes) {
// There are three attributes, by default
- if (count($attributes) != 3) {
+ if (count($attributes) != 6) {
// Not the right count
- debug_report_bug(__FUNCTION__, __LINE__, 'Expected 3 attributes, got ' . count($attributes));
+ debug_report_bug(__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.');
} 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'])) {
+ } elseif (!isset($attributes['TABLE'])) {
+ // 'TABLE' not found
+ debug_report_bug(__FUNCTION__, __LINE__, 'Required attribute TABLE not found.');
+ } elseif (!isXmlValueValid($attributes['TYPE'], $attributes['TABLE'])) {
// Not valid/verifyable
- debug_report_bug(__FUNCTION__, __LINE__, 'Attribute VALUE does not validate. TYPE=' . $attributes['TYPE'] . ',VALUE=' . $attributes['VALUE']);
+ debug_report_bug(__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.');
+ } elseif (!isset($attributes['FUNCTION'])) {
+ // 'FUNCTION' not found
+ debug_report_bug(__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']);
+ } 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']);
} 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.');
addXmlValueToCallbackAttributes('extra_list', $attributes, 'member_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));
+ } 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.');
+ }
+}
+
+// Handles the XML node 'extra-parameter-added-list-entry'
+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));
+ } 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']['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.');
+ }
+
+ // Add the entry to the list
+ addXmlValueToCallbackAttributes('extra_list', $attributes, 'added_list');
+}
+
// Handles the XML node 'status-change-column'
function doXmlStatusChangeColumn ($resource, $attributes) {
// There are three attributes, by default
debug_report_bug(__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/member-list not included around this node. Please fix your XML.');
+ debug_report_bug(__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
//* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'TYPE=' . $attributes['TYPE'] . ',element=' . $element);
$GLOBALS['__XML_ARGUMENTS']['doXmlCallbackFunction'][$element][$attributes['VALUE'] . '_list'] = array();
} elseif (!empty($extraKey)) {
- // Is it bool?
- if (($attributes['TYPE'] == 'bool') && (isset($attributes['VALUE']))) {
- // Then convert VALUE
- $attributes['VALUE'] = convertStringToBoolean($attributes['VALUE']);
- } // END - if
-
// Sub-array (one level only)
//* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'element=' . $element . ',extraKey=' . $extraKey . ',TYPE=' . $attributes['TYPE'] . ' - ANALYSING...');
if (trim($attributes['NAME']) == '') {
'column' => trim($attributes['VALUE']),
'alias' => trim($attributes['ALIAS']),
'function' => trim($attributes['FUNCTION']),
- 'table' => trim($attributes['TABLE'])
+ 'table' => trim($attributes['TABLE']),
+ 'name' => trim($attributes['NAME'])
);
// Add the entry
return false;
} // END - if
- // Prepare the SQL statement
- $sql = "SELECT `".implode("`,`", $columns)."` FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`='%s' LIMIT 1";
+ // Is this is a simple array?
+ if ((is_array($columns[0])) && (isset($columns[0]['column']))) {
+ // Begin with SQL query
+ $sql = 'SELECT ';
+
+ // No, it comes from XML, so get it back from it
+ $sql .= getSqlPartFromXmlArray($columns);
+
+ // Finalize it
+ $sql .= " FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`='%s' LIMIT 1";
+ } else {
+ // Yes, prepare the SQL statement
+ $sql = 'SELECT `' . implode('`,`', $columns) . "` FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`='%s' LIMIT 1";
+ }
// Return the result
return SQL_QUERY_ESC($sql,
// Extensions are not always active by default
setExtensionAlwaysActive('N');
- // Extension update notes
- // @TODO Do we still need this? setExtensionUpdateNotes('');
-
// Include the extension file
loadCurrentExtensionInclude();
`forced_ads_views_counter` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
`forced_ads_clicks_counter` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
`forced_ads_added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-PRIMARY KEY (`forced_ads_id`)",
+`forced_ads_userid` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
+PRIMARY KEY (`forced_ads_id`),
+INDEX (`forced_ads_userid`)",
'Forced Ads Data');
// - Campaigns
// Menu systems
addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_admin_menu` WHERE `action`='forced'");
- addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `what` IN ('forced_banner','forced_textlink','book_forced') LIMIT 3");
+ addExtensionSql("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_member_menu` WHERE `what` LIKE '%forced%'");
// Is earning_data there?
if (isSqlTableCreated('earning_data')) {
// Filter all data
foreach ($content as $key => $value) {
// Search index
- $idx = array_search($key, $columns, true);
+ $idx = searchXmlArray($key, $columns, 'column');
+
+ // Skip any missing entries
+ if ($idx === false) {
+ // Skip this one
+ //* DEBUG: */ debug_report_bug(__FUNCTION__, __LINE__, 'key=' . $key . ' - SKIPPED!');
+ continue;
+ } // END - if
// Do we have a userid?
//* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'key=' . $key . ',userIdColumn=' . $userIdColumn[0]);
if ($key == $userIdColumn[0]) {
// Add it again as raw id
//* DEBUG: */ debug_report_bug(__FUNCTION__, __LINE__, 'key=' . $key . ',userIdColumn=' . $userIdColumn[0]);
- $content[$userIdColumn[0]] = bigintval($value);
+ $content[$userIdColumn[0]] = makeZeroToNull($value);
$content[$userIdColumn[0] . '_raw'] = $content[$userIdColumn[0]];
} // END - if
$GLOBALS['admin_list_builder_id_value'] = $value;
} // END - if
- // Handle the call in external function
- //* DEBUG: */ debugOutput('key=' . $key . ',fucntion=' . $filterFunctions[$idx] . ',value=' . $value);
- $content[$key] = handleExtraValues(
- $filterFunctions[$idx],
- $value,
- $extraValues[$idx]
- );
+ // Do we have a call-back function and extra-value pair?
+ if ((isset($filterFunctions[$idx])) && (isset($extraValues[$idx]))) {
+ // Handle the call in external function
+ //* DEBUG: */ debugOutput('key=' . $key . ',fucntion=' . $filterFunctions[$idx] . ',value=' . $value);
+ $content[$key] = handleExtraValues(
+ $filterFunctions[$idx],
+ $value,
+ $extraValues[$idx]
+ );
+ } elseif ((isset($columns[$idx]['name'])) && (isset($filterFunctions[$columns[$idx]['name']])) && (isset($extraValues[$columns[$idx]['name']]))) {
+ // Handle the call in external function
+ //* DEBUG: */ debugOutput('key=' . $key . ',fucntion=' . $filterFunctions[$columns[$idx]['name']] . ',value=' . $value);
+ $content[$key] = handleExtraValues(
+ $filterFunctions[$columns[$idx]['name']],
+ $value,
+ $extraValues[$columns[$idx]['name']]
+ );
+ }
} // END - foreach
// Then list it
// All valid entries? (We hope so here!)
//* DEBUG: */ debug_report_bug(__FUNCTION__, __LINE__, 'idColumn=<pre>'.print_r($idColumn,true).'</pre>,tableName<pre>'.print_r($tableName,true).'</pre>,columns=<pre>'.print_r($columns,true).'</pre>,filterFunctions=<pre>'.print_r($filterFunctions,true).'</pre>,extraValues=<pre>'.print_r($extraValues,true).'</pre>,editNow=<pre>'.print_r($editNow,true).'</pre>,userIdColumn=<pre>'.print_r($userIdColumn,true).'</pre>,rawUserId=<pre>'.print_r($rawUserId,true).'</pre>');
- if ((count($columns) == count($filterFunctions)) && (count($columns) == count($extraValues))) {
+ //if ((count($columns) == count($filterFunctions)) && (count($columns) == count($extraValues))) {
+ if (true) {
// Shall we change here or list for editing?
if ($editNow[0] === true) {
// Change them all
// This is the minimum query, so at least columns and tableName must have entries
$SQL = 'SELECT ';
- foreach ($columns as $columnArray) {
- // Init SQL part
- $sqlPart = '';
- // Do we have a table/alias
- if (!empty($columnArray['table'])) {
- // Pre-add it
- $sqlPart .= $columnArray['table'] . '.';
- } // END - if
-
- // Add column
- $sqlPart .= '`' . $columnArray['column'] . '`';
- // Is a function and alias set?
- if ((!empty($columnArray['function'])) && (!empty($columnArray['alias']))) {
- // Add both
- $sqlPart = $columnArray['function'] . '(' . $sqlPart . ') AS `' . $columnArray['alias'] . '`';
- } // END - if
-
- // Add finished SQL part to the query
- $SQL .= $sqlPart . ',';
- } // END - foreach
+ // Get the sql part back from given array
+ $SQL .= getSqlPartFromXmlArray($columnArray);
// Remove last commata and add FROM statement
- $SQL = substr($SQL, 0, -1) . ' FROM `{?_MYSQL_PREFIX?}_' . $tableName[0] . '`';
+ $SQL .= ' FROM `{?_MYSQL_PREFIX?}_' . $tableName[0] . '`';
// Do we have entries from whereColumns to add?
if (count($whereColumns) > 0) {
return $return;
}
+// "Getter" for sql part back from given array
+function getSqlPartFromXmlArray ($columns) {
+ // Init SQL
+ $SQL = '';
+
+ // Walk through all entries
+ foreach ($columns as $columnArray) {
+ // Init SQL part
+ $sqlPart = '';
+
+ // Do we have a table/alias
+ if (!empty($columnArray['table'])) {
+ // Pre-add it
+ $sqlPart .= $columnArray['table'] . '.';
+ } // END - if
+
+ // Add column
+ $sqlPart .= '`' . $columnArray['column'] . '`';
+
+ // Is a function and alias set?
+ if ((!empty($columnArray['function'])) && (!empty($columnArray['alias']))) {
+ // Add both
+ $sqlPart = $columnArray['function'] . '(' . $sqlPart . ') AS `' . $columnArray['alias'] . '`';
+ } // END - if
+
+ // Add finished SQL part to the query
+ $SQL .= $sqlPart . ',';
+ } // END - foreach
+
+ // Return it without last commata
+ return substr($SQL, 0, -1);
+}
+
+// Searches in given XML array for value and returns the parent index
+function searchXmlArray ($value, $columns, $childKey) {
+ // Default is not found
+ $return = false;
+
+ // Walk through whole array
+ foreach ($columns as $key => $columnArray) {
+ // Make sure the element is there
+ assert(isset($columnArray[$childKey]));
+
+ // Now is it what we are looking for?
+ if ($columnArray[$childKey] == $value) {
+ // Remember this match
+ $return = $key;
+
+ // And abort any further searches
+ break;
+ } // END - foreach
+ } // END - foreach
+
+ // Return key/false
+ return $return;
+}
+
// [EOF]
?>
<form accept-charset="UTF-8" action="{%url=modules.php?module=admin&what=list_forced_ads%}" method="post">
<table border="0" cellspacing="0" cellpadding="0" class="table dashed" width="800">
<tr>
- <td align="center" colspan="5" class="table_header">
+ <td align="center" colspan="6" class="table_header">
<strong>{--ADMIN_LIST_FORCED_ADS_TITLE--}</strong>
</td>
</tr>
<tr>
<td class="header_column bottom right" align="center"><strong>{--ID_SELECT--}</strong></td>
+ <td class="header_column bottom right" align="center"><strong>{--_USERID--}</strong></td>
<td class="header_column bottom right" align="center"><strong>{--ADMIN_TEST_URL--}</strong></td>
<td class="header_column bottom right" align="center"><strong>{--ADMIN_FORCED_ADS_TYPE--}</strong></td>
<td class="header_column bottom right" align="center"><strong>{--ADMIN_FORCED_ADS_HAS_FRAMEBREAKER--}</strong></td>
</tr>
$content
<tr>
- <td class="table_footer" colspan="5">
+ <td class="table_footer" colspan="6">
<input type="reset" class="form_reset" value="{--UNDO_SELECTIONS--}" />
<input type="submit" class="form_submit" name="edit" value="{--ADMIN_ACTION_EDIT_SUBMIT--}" />
<input type="submit" class="form_delete" name="delete" value="{--ADMIN_ACTION_DELETE_SUBMIT--}" />
<td align="center" class="bottom right {%template,ColorSwitch%}">
<input type="checkbox" class="form_field" title="{--ID_SELECT--} $content[forced_ads_id] - $content[forced_ads_alt_text]" name="forced_ads_id[$content[forced_ads_id]]" value="1" />
</td>
+ <td class="{%template,ColorSwitch%} bottom right" align="center">
+ {%pipe,generateUserProfileLink=$content[forced_ads_userid]%}
+ </td>
<td align="center" class="bottom right {%template,ColorSwitch%}">
<a href="{%pipe,generateFrametesterUrl=$content[forced_ads_click_url]%}" target="_blank" title="{--ADMIN_TEST_URL--} - $content[forced_ads_alt_text]">{--ADMIN_TEST_URL--}</a>
</td>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+This template provides meta data for editing forced ads.
+
+@author Roland Haeder <webmaster@mxchange.org>
+@version 0.2.1-FINAL
+@copyright (c) 2003 - 2009 by Roland Haeder
+@copyright (c) 2009 - 2011 by Mailer Developer Team
+@license GNU GPL 2.0 or any newer version
+@link http://mxchange.org
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+MA 02110-1301 USA
+//-->
+<admin-entry-meta-data>
+ <!--
+ Call-back function which should all following parameter handled over
+ to. This will always be type of string but we like homogene XMLs.
+ //-->
+ <callback-function type="string" value="adminEditEntriesConfirm" />
+ <!--
+ Name of the database table where the entries should be read/write from/to.
+ //-->
+ <database-table name="" type="string" value="forced_ads" />
+ <!--
+ The following three lists must have the same count of list entries, else an
+ error may occur.
+ //-->
+ <!--
+ And all column names to read/write, leave this list tag empty for all (*).
+ //-->
+ <database-column-list>
+ <!--
+ A column name list entry. The type is always string, or do you have
+ numerical column names?
+ //-->
+ <database-column-list-entry name="" type="string" table="" value="forced_ads_id" alias="" function="" />
+ <database-column-list-entry name="member_list" type="string" table="" value="forced_ads_userid" alias="" function="" />
+ <database-column-list-entry name="added_list" type="string" table="" value="forced_ads_added" alias="forced_ads_added" function="UNIX_TIMESTAMP" />
+ <database-column-list-entry name="" type="string" table="" value="forced_ads_ad_url" alias="" function="" />
+ <database-column-list-entry name="" type="string" table="" value="forced_ads_click_url" alias="" function="" />
+ <database-column-list-entry name="" type="string" table="" value="forced_ads_width" alias="" function="" />
+ <database-column-list-entry name="" type="string" table="" value="forced_ads_height" alias="" function="" />
+ <database-column-list-entry name="" type="string" table="" value="forced_ads_alt_text" alias="" function="" />
+ <database-column-list-entry name="" type="string" table="" value="forced_ads_framebreaker" alias="" function="" />
+ <database-column-list-entry name="" type="string" table="" value="forced_ads_type" alias="" function="" />
+ <database-column-list-entry name="" type="string" table="" value="forced_ads_views_counter" alias="" function="" />
+ <database-column-list-entry name="" type="string" table="" value="forced_ads_clicks_counter" alias="" function="" />
+ </database-column-list>
+ <!--
+ "Filter" call-back functions to call back for piping the fetched data
+ through (can be left empty, no call-back function will be called)
+ //-->
+ <callback-function-list>
+ <!--
+ A call-back function list entry
+ //-->
+ <callback-function-list-entry name="" type="string" value="bigintval" />
+ <callback-function-list-entry name="member_list" type="string" value="addMemberSelectionBox" />
+ <callback-function-list-entry name="added_list" type="string" value="generateDateTime" />
+ </callback-function-list>
+ <!--
+ Extra parameters (2nd, 3rd, ...) for above call-back functions. If an array
+ is provided, we have more than two parameters to handle over to the
+ call-back function. See function handleExtraValues() for details.
+ //-->
+ <extra-parameter-list>
+ <!--
+ Dummy entry
+ //-->
+ <extra-parameter-list-entry name="" type="string" value="" />
+ <!--
+ A one-dimensional array with some entries
+ //-->
+ <extra-parameter-list-entry name="" type="array" value="member">
+ <!--
+ Our 'member' array
+ //-->
+ <extra-parameter-member-list>
+ <!--
+ A bool entry in the 'bar' array, all other types are added in a
+ similar way.
+ //-->
+ <extra-parameter-member-list-entry name="" type="bool" value="false" />
+ <extra-parameter-member-list-entry name="" type="bool" value="true" />
+ <extra-parameter-member-list-entry name="" type="bool" value="true" />
+ <!--
+ The brackets [] are required for addMemberSelectionBox(),
+ please read there for details.
+ //-->
+ <extra-parameter-member-list-entry name="" type="string" value="forced_ads_userid[]" />
+ </extra-parameter-member-list>
+ </extra-parameter-list-entry>
+ <!--
+ A one-dimensional array with some entries
+ //-->
+ <extra-parameter-list-entry name="" type="array" value="added">
+ <!--
+ Our 'added' array
+ //-->
+ <extra-parameter-added-list>
+ <!--
+ A bool entry in the 'bar' array, all other types are added in a
+ similar way.
+ //-->
+ <extra-parameter-added-list-entry name="" type="int" value="2" />
+ </extra-parameter-added-list>
+ </extra-parameter-list-entry>
+ </extra-parameter-list>
+ <!--
+ Wether to 'edit/delete/change' (change) the entries (true) or just read them for displaying (false)
+ //-->
+ <enable-modify-entries name="" type="bool" value="false" />
+ <!--
+ The table column which should be taken for the ids (see first parameter).
+ This' type can again only be 'string' (remember why?).
+ //-->
+ <table-id-column name="" type="string" value="forced_ads_id" />
+ <!--
+ The table column which should be taken for user ids
+ This' type can again only be 'string' (remember why?).
+ //-->
+ <table-userid-column name="" type="string" value="forced_ads_userid" />
+ <!--
+ Raw userid column ($key) to skip which is always an invalid (?) entry
+ This' type can again only be 'string' (remember why?).
+ //-->
+ <raw-userid-column-key name="" type="string" value="forced_ads_userid" />
+</admin-entry-meta-data>
A column name list entry. The type is always string, or do you have
numerical column names?
//-->
- <database-column-list-entry name="" type="string" value="url_id" />
- <database-column-list-entry name="member_list" type="string" value="url_userid" />
- <database-column-list-entry name="" type="string" value="url" />
+ <database-column-list-entry name="" type="string" table="" value="url_id" alias="" function="" />
+ <database-column-list-entry name="member_list" type="string" table="" value="url_userid" alias="" function="" />
+ <database-column-list-entry name="" type="string" table="" value="url" alias="" function="" />
</database-column-list>
<!--
"Filter" call-back functions to call back for piping the fetched data
(can also be left empty) which shall be applied on the column.
//-->
<select-data-from-list-entry type="string" table="" value="forced_ads_id" alias="" function="" />
+ <select-data-from-list-entry type="string" table="" value="forced_ads_userid" alias="" function="" />
<select-data-from-list-entry type="string" table="" value="forced_ads_click_url" alias="" function="" />
<select-data-from-list-entry type="string" table="" value="forced_ads_alt_text" alias="" function="" />
<select-data-from-list-entry type="string" table="" value="forced_ads_type" alias="" function="" />
A column name list entry. The type is always string, or do you have
numerical column names?
//-->
- <database-column-list-entry name="" type="string" value="foo" />
+ <database-column-list-entry name="" type="string" table="" value="foo" alias="" function="" />
</database-column-list>
<!--
"Filter" call-back functions to call back for piping the fetched data