}
}
-/**
- * Checks if given subject is found and if not, adds an SQL query to the
- * extension registration queue.
- */
-function registerExtensionPointsData ($subject, $columnName, $lockedMode, $paymentMethod) {
- // Default is old extension version
- $add = '';
+// 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 ';
- // Is the extension equal or newer 0.8.9?
- if (((isInstallationPhase()) && ((getExtensionMode() == 'register') || (getExtensionMode() == 'update'))) || (isExtensionInstalledAndNewer('sql_patches', '0.8.9'))) {
- // Then add provider
- $add = " AND `account_provider`='EXTENSION'";
+ // Get the sql part back from given array
+ $SQL .= getSqlPartFromXmlArray($columns);
+
+ // Remove last commata and add FROM statement
+ $SQL .= ' FROM `{?_MYSQL_PREFIX?}_' . $tableName[0] . '`';
+
+ // Do we have 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
- // Is the 'subject' there?
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'ifSqlTableExists(points_data)=' . ifSqlTableExists('points_data') . ',getExtensionMode()=' . getExtensionMode() . ',add=' . $add);
- if (((!ifSqlTableExists('points_data')) && ((getExtensionMode() == 'register') || (getExtensionMode() == 'update'))) || (countSumTotalData($subject, 'points_data', 'id', 'subject', true, $add) == 0)) {
- // Not found so:
- if ((isset($GLOBALS['previous_extension'][getCurrentExtensionName()])) && (!ifSqlTableExists('points_data'))) {
- $dummy = $GLOBALS['previous_extension'][getCurrentExtensionName()];
- reportBug(__FUNCTION__, __LINE__, 'previous_extension[' . gettype($dummy) . ']=' . $dummy . ',getCurrentExtensionName()=' . getCurrentExtensionName() . ' - Under development, please report this!');
- } // END - if
+ // Do we have 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 an SQL query
- addExtensionSql(sprintf("INSERT INTO `{?_MYSQL_PREFIX?}_points_data` (`subject`,`column_name`,`locked_mode`,`payment_method`) VALUES ('%s','%s','%s','%s')",
- $subject,
- $columnName,
- $lockedMode,
- $paymentMethod
- ));
+ // 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);
}
-/**
- * Checks if given subject is found and if so, adds an SQL query to the
- * extension unregistration queue.
- */
-function unregisterExtensionPointsData ($subject) {
- // Default is old extension version
- $add = '';
+// Do the listing of entries
+function doListEntries ($SQL, $tableTemplate, $noEntryMessageId, $rowTemplate, $callbackColumns, $extraParameters = array()) {
+ // Run the SQL query
+ $result = SQL_QUERY($SQL, __FUNCTION__, __LINE__);
+
+ // Do we have 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]);
+
+ // Do we have 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
- // Is the extension equal or newer 0.8.9?
- if (isExtensionInstalledAndNewer('sql_patches', '0.8.9')) {
- // Then add provider
- $add = " AND `account_provider`='EXTENSION'";
+ // 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;
+
+ // Do we have "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
+}
- // Is the 'subject' there?
- if (countSumTotalData($subject, 'points_data', 'id', 'subject', true, $add) == 1) {
- // Found one or more, so add an SQL query
- addExtensionSql(sprintf("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_points_data` WHERE `subject`='%s'" . $add . " LIMIT 1",
- $subject
- ));
+// 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--}');
+ }
}
// [EOF]