+ } else {
+ // No what set, needs to be ignored (last_module is last_what)
+ SQL_QUERY_ESC("UPDATE
+ `{?_MYSQL_PREFIX?}_user_data`
+SET
+ `%s`=NULL,
+ `last_online`=UNIX_TIMESTAMP(),
+ `REMOTE_ADDR`='%s'
+WHERE
+ `userid`=%s
+LIMIT 1",
+ array(
+ getUserLastWhatName(),
+ detectRemoteAddr(),
+ bigintval($userid)
+ ), __FUNCTION__, __LINE__);
+ }
+}
+
+// List all given rows (callback function from XML)
+function doGenericListEntries ($tableTemplate, $rowTemplate, $noEntryMessageId, $tableName, $columns, $whereColumns, $orderByColumns, $callbackColumns, $extraParameters = array(), $conditions = array()) {
+ // Verify that tableName and columns are not empty
+ if ((!is_array($tableName)) || (count($tableName) != 1)) {
+ // No tableName specified
+ reportBug(__FUNCTION__, __LINE__, 'tableName is not given. Please fix your XML,tableName[]=' . gettype($tableName) . '!=array,tableTemplate=' . $tableTemplate . ',rowTemplate=' . $rowTemplate);
+ } elseif (count($columns) == 0) {
+ // No columns specified
+ reportBug(__FUNCTION__, __LINE__, 'columns is not given. Please fix your XML,tableTemplate=' . $tableTemplate . ',rowTemplate=' . $rowTemplate . ',tableName[0]=' . $tableName[0]);
+ }
+
+ // This is the minimum query, so at least columns and tableName must have entries
+ $SQL = 'SELECT ';
+
+ // Get the sql part back from given array
+ $SQL .= getSqlPartFromXmlArray($columns);
+
+ // Remove last commata and add FROM statement
+ $SQL .= ' FROM `{?_MYSQL_PREFIX?}_' . $tableName[0] . '`';
+
+ // Are there entries from whereColumns to add?
+ if (count($whereColumns) > 0) {
+ // Then add these as well
+ if (count($whereColumns) == 1) {
+ // One entry found
+ $SQL .= ' WHERE ';
+
+ // Table/alias included?
+ if (!empty($whereColumns[0]['table'])) {
+ // Add it as well
+ $SQL .= $whereColumns[0]['table'] . '.';
+ } // END - if
+
+ // Add the rest
+ $SQL .= '`' . $whereColumns[0]['column'] . '`' . $whereColumns[0]['condition'] . chr(39) . $whereColumns[0]['look_for'] . chr(39);
+ } elseif ((count($whereColumns > 1)) && (count($conditions) > 0)) {
+ // More than one "WHERE" + condition found
+ foreach ($whereColumns as $idx => $columnArray) {
+ // Default is WHERE
+ $condition = 'WHERE';
+
+ // Is the condition element there?
+ if (isset($conditions[$columnArray['column']])) {
+ // Assume the condition
+ $condition = $conditions[$columnArray['column']];
+ } // END - if
+
+ // Add to SQL query
+ $SQL .= ' ' . $condition;
+
+ // Table/alias included?
+ if (!empty($whereColumns[$idx]['table'])) {
+ // Add it as well
+ $SQL .= $whereColumns[$idx]['table'] . '.';
+ } // END - if
+
+ // Add the rest
+ $SQL .= '`' . $whereColumns[$idx]['column'] . '`' . $whereColumns[$idx]['condition'] . chr(39) . convertDollarDataToGetElement($whereColumns[$idx]['look_for']) . chr(39);
+ } // END - foreach
+ } else {
+ // Did not set $conditions
+ reportBug(__FUNCTION__, __LINE__, 'Supplied more than "whereColumns" entries but no conditions! Please fix your XML template.');
+ }
+ } // END - if
+
+ // Are there entries from orderByColumns to add?
+ if (count($orderByColumns) > 0) {
+ // Add them as well
+ $SQL .= ' ORDER BY ';
+ foreach ($orderByColumns as $orderByColumn => $array) {
+ // Get keys (table/alias) and values (sorting itself)
+ $table = trim(implode('', array_keys($array)));
+ $sorting = trim(implode('', array_keys($array)));
+
+ // table/alias can be omitted
+ if (!empty($table)) {
+ // table/alias is given
+ $SQL .= $table . '.';
+ } // END - if
+
+ // Add order-by column
+ $SQL .= '`' . $orderByColumn . '` ' . $sorting . ',';
+ } // END - foreach
+
+ // Remove last column
+ $SQL = substr($SQL, 0, -1);
+ } // END - if
+
+ // Now handle all over to the inner function which will execute the listing
+ doListEntries($SQL, $tableTemplate, $noEntryMessageId, $rowTemplate, $callbackColumns, $extraParameters);
+}
+
+// Do the listing of entries
+function doListEntries ($SQL, $tableTemplate, $noEntryMessageId, $rowTemplate, $callbackColumns, $extraParameters = array()) {
+ // Run the SQL query
+ $result = SQL_QUERY($SQL, __FUNCTION__, __LINE__);
+
+ // Are there some URLs left?
+ if (!SQL_HASZERONUMS($result)) {
+ // List all URLs
+ $OUT = '';
+ while ($content = SQL_FETCHARRAY($result)) {
+ // "Translate" content
+ foreach ($callbackColumns as $columnName => $callbackName) {
+ // Fill the callback arguments
+ $args = array($content[$columnName]);
+
+ // Is there more to add?
+ if (isset($extraParameters[$columnName])) {
+ // Add them as well
+ $args = merge_array($args, $extraParameters[$columnName]);
+ } // END - if
+
+ // Call the callback-function
+ //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'callbackFunction=' . $callbackName . ',args=<pre>'.print_r($args, true).'</pre>');
+ // @TODO If we can rewrite the EL sub-system to support more than one parameter, this call_user_func_array() can be avoided
+ $content[$columnName] = call_user_func_array($callbackName, $args);
+ } // END - foreach
+
+ // Load row template
+ $OUT .= loadTemplate(trim($rowTemplate[0]), true, $content);
+ } // END - while
+
+ // Load main template
+ loadTemplate(trim($tableTemplate[0]), false, $OUT);
+ } else {
+ // No URLs in surfbar
+ displayMessage('{--' .$noEntryMessageId[0] . '--}');
+ }
+
+ // Free result
+ SQL_FREERESULT($result);
+}
+
+// Adds a given entry to the database
+function doGenericAddEntries ($tableName, $columns = array(), $filterFunctions = array(), $extraValues = array(), $timeColumns = array(), $columnIndex = NULL) {
+ //* DEBUG: */ die('columns=<pre>'.print_r($columns,true).'</pre>,filterFunctions=<pre>'.print_r($filterFunctions,true).'</pre>,extraValues=<pre>'.print_r($extraValues,true).'</pre>,POST=<pre>'.print_r($_POST,true).'</pre>');
+ // Verify that tableName and columns are not empty
+ if ((!is_array($tableName)) || (count($tableName) != 1)) {
+ // No tableName specified
+ reportBug(__FUNCTION__, __LINE__, 'tableName is not given. Please fix your XML,tableName[]=' . gettype($tableName) . '!=array: userIdColumn=' . $userIdColumn);
+ } elseif (count($columns) == 0) {
+ // No columns specified
+ reportBug(__FUNCTION__, __LINE__, 'columns is not given. Please fix your XML.');
+ }
+
+ // Init columns and value elements
+ $sqlColumns = array();
+ $sqlValues = array();
+
+ // Default is that all went fine
+ $GLOBALS['__XML_PARSE_RESULT'] = true;
+
+ // Is there "time columns"?
+ if (count($timeColumns) > 0) {
+ // Then "walk" through all entries
+ foreach ($timeColumns as $column) {
+ // Convert all (possible) selections
+ convertSelectionsToEpocheTimeInPostData($column . '_ye');
+ } // END - foreach
+ } // END - if
+
+ // Add columns and values
+ foreach ($columns as $key => $columnName) {
+ //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'key=' . $key . ',columnName=' . $columnName);
+ // Is columnIndex set?
+ if (!is_null($columnIndex)) {
+ // Check conditions
+ //* DEBUG: */ die('columnIndex=<pre>'.print_r($columnIndex,true).'</pre>'.debug_get_printable_backtrace());
+ assert((is_array($columnName)) && (is_string($columnIndex)) && (isset($columnName[$columnIndex])));
+
+ // Then use that index "blindly"
+ $columnName = $columnName[$columnIndex];
+ } // END - if
+
+ // Debug message
+ //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'key=' . $key . ',columnName[' . gettype($columnName) . ']=' . $columnName . ',filterFunctions=' . $filterFunctions[$key] . ',extraValues=' . intval(isset($extraValues[$key])) . ',extraValuesName=' . intval(isset($extraValues[$columnName . '_list'])) . '<br />');
+
+ // Copy entry securely to the final arrays
+ $sqlColumns[$key] = SQL_ESCAPE($columnName);
+ $sqlValues[$key] = SQL_ESCAPE(postRequestElement($columnName));
+
+ // Send data through the filter function if found
+ if ((isset($filterFunctions[$key])) && (isset($extraValues[$key . '_list']))) {
+ // Filter function set!
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlValues[' . $key . '][' . gettype($sqlValues[$key]) . ']=' . $sqlValues[$key] . ' - BEFORE!');
+ $sqlValues[$key] = call_user_func_array($filterFunctions[$key], merge_array(array($columnName), $extraValues[$key . '_list']));
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlValues[' . $key . '][' . gettype($sqlValues[$key]) . ']=' . $sqlValues[$key] . ' - AFTER!');
+ } elseif ((isset($filterFunctions[$key])) && (!empty($filterFunctions[$key]))) {
+ // Run through an extra filter
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlValues[' . $key . '][' . gettype($sqlValues[$key]) . ']=' . $sqlValues[$key] . ' - BEFORE!');
+ $sqlValues[$key] = handleExtraValues($filterFunctions[$key], $sqlValues[$key], '');
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlValues[' . $key . '][' . gettype($sqlValues[$key]) . ']=' . $sqlValues[$key] . ' - AFTER!');
+ }
+
+ // Is the value not a number?
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlValues[' . $key . '][' . gettype($sqlValues[$key]) . ']=' . $sqlValues[$key]);
+ if (($sqlValues[$key] != 'NULL') && (is_string($sqlValues[$key]))) {
+ // Add quotes around it
+ $sqlValues[$key] = chr(39) . $sqlValues[$key] . chr(39);
+ } // END - if
+
+ // Is the value false?
+ if ($sqlValues[$key] === false) {
+ // One "parser" didn't like it
+ $GLOBALS['__XML_PARSE_RESULT'] = false;
+ break;
+ } // END - if
+ } // END - foreach
+
+ // If all values are okay, continue
+ if ($sqlValues[$key] !== false) {
+ // Build the SQL query
+ $SQL = 'INSERT INTO `{?_MYSQL_PREFIX?}_' . $tableName[0] . '` (`' . implode('`,`', $sqlColumns) . "`) VALUES (" . implode(',', $sqlValues) . ')';
+
+ // Run the SQL query
+ SQL_QUERY($SQL, __FUNCTION__, __LINE__);
+ } // END - if
+}
+
+// Adds a given entry to the database
+function memberAddEntries ($tableName, $columns = array(), $filterFunctions = array(), $extraValues = array(), $timeColumns = array(), $columnIndex = NULL) {
+ // Is it a member?
+ if (!isMember()) {
+ // Then abort here
+ return false;
+ } // END - if
+
+ // Set POST data generic userid
+ setPostRequestElement('userid', getMemberId());
+
+ // Call inner function
+ doGenericAddEntries($tableName, $columns, $filterFunctions, $extraValues, $timeColumns, $columnIndex);
+
+ // Entry has been added?
+ if ((!SQL_HASZEROAFFECTED()) && ($GLOBALS['__XML_PARSE_RESULT'] === true)) {
+ // Display success message
+ displayMessage('{--MEMBER_ENTRY_ADDED--}');
+ } else {
+ // Display failed message
+ displayMessage('{--MEMBER_ENTRY_NOT_ADDED--}');
+ }