X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fmysql-manager.php;h=0513795fb2c3df80a613772120c50b56a8ce684e;hp=ccb978024b8274addb8cdb38752c740c3197f1cc;hb=8fad776382e63b3f73f8dbe289f229d79cfc2c22;hpb=2290ae1a5f635d475b3886972a95a8fdb52bd3ce diff --git a/inc/mysql-manager.php b/inc/mysql-manager.php index ccb978024b..0513795fb2 100644 --- a/inc/mysql-manager.php +++ b/inc/mysql-manager.php @@ -111,7 +111,7 @@ function addYouAreHereLink ($accessLevel, $FQFN, $return = false) { // Get access level from it $modCheck = getModuleFromFileName($file, $accessLevel); - // Do we have admin? Then display all + // Is there admin? Then display all $ADD = " AND `visible`='Y' AND `locked`='N'"; if (isAdmin()) { // Display all! @@ -166,7 +166,7 @@ function addYouAreHereLink ($accessLevel, $FQFN, $return = false) { $OUT = $prefix . '' . getTitleFromMenu($accessLevel, $search, $type, $ADD) . ''; // Can we close the you-are-here navigation? - /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'type=' . $type . ',getWhat()=' . getWhat() . ',accessLevel=' . $accessLevel . ',isWhatSet()=' . intval(isWhatSet())); + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'type=' . $type . ',getWhat()=' . getWhat() . ',accessLevel=' . $accessLevel . ',isWhatSet()=' . intval(isWhatSet())); if (($type == 'what') || (($type == 'action') && ((!isWhatSet()) || (($accessLevel == 'admin') && (getWhat() == 'welcome'))))) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'type=' . $type); // Add closing div and br-tag @@ -258,7 +258,7 @@ ORDER BY $content['action'] ), __FUNCTION__, __LINE__); - // Do we have some entries? + // Are there some entries? if (!SQL_HASZERONUMS($result_sub)) { // Init counter $count = '0'; @@ -423,7 +423,7 @@ function isMember () { // Init user data array initUserData(); - // Fix "deleted" cookies first + // Fix "deleted" cookies fixDeletedCookies(array('userid', 'u_hash')); // Are cookies set and can the member data be loaded? @@ -476,12 +476,18 @@ function fetchUserData ($value, $column = 'userid') { if (!isValidUserId($value)) { // Invalid, so abort here reportBug(__FUNCTION__, __LINE__, 'User id ' . $value . ' is invalid.'); + } // END - if + + // Unset cached values if found and different + if ((isCurrentUserIdSet()) && (getCurrentUserId() != $value)) { + // Unset it + unsetCurrentUserId(); } elseif (isUserDataValid()) { // Use cache, so it is fine //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'value=' . $value . ' is valid, using cache #1'); return true; - } - } elseif (isUserDataValid()) { + } // END - if + } elseif (isUserDataValid()) { // Using cache is fine //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'value=' . $value . ' is valid, using cache #2'); return true; @@ -491,13 +497,16 @@ function fetchUserData ($value, $column = 'userid') { $found = false; // Extra SQL statements - $ADD = runFilterChain('convert_user_data_columns', ''); + $ADD = runFilterChain('convert_user_data_columns', ' '); // Query for the user $result = SQL_QUERY_ESC("SELECT *" . $ADD . " FROM `{?_MYSQL_PREFIX?}_user_data` WHERE `%s`='%s' LIMIT 1", - array($column, $value), __FUNCTION__, __LINE__); + array( + $column, + $value + ), __FUNCTION__, __LINE__); - // Do we have a record? + // Is there a record? if (SQL_NUMROWS($result) == 1) { // Load data from cookies $data = SQL_FETCHARRAY($result); @@ -582,7 +591,7 @@ function isAdmin () { return false; } // END - if - // Do we have cache? + // Is there cache? if (!isset($GLOBALS[__FUNCTION__][$adminId])) { // Init it with failed $GLOBALS[__FUNCTION__][$adminId] = false; @@ -620,7 +629,7 @@ function isAdmin () { } // Generates a list of "max receiveable emails per day" -function addMaxReceiveList ($mode, $default = '', $return = false) { +function addMaxReceiveList ($mode, $default = '') { $OUT = ''; $result = false; @@ -668,13 +677,8 @@ function addMaxReceiveList ($mode, $default = '', $return = false) { // Free result SQL_FREERESULT($result); - if ($return === true) { - // Return generated HTML code - return $OUT; - } else { - // Output directly (default) - outputHtml($OUT); - } + // Return generated HTML code + return $OUT; } // Checks whether the given email address is used. @@ -892,7 +896,7 @@ function getPaymentData ($paymentsId, $lookFor = 'price') { // Default value... $data[$lookFor] = NULL; - // Do we have cache? + // Is there cache? if (isset($GLOBALS['cache_array']['payments'][$paymentsId]['id'])) { // Use it if found to save SQL queries $data[$lookFor] = $GLOBALS['cache_array']['payments'][$lookFor][$paymentsId]; @@ -1097,7 +1101,7 @@ function getAdminId ($adminLogin) { $result = SQL_QUERY_ESC("SELECT `id` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `login`='%s' LIMIT 1", array($adminLogin), __FUNCTION__, __LINE__); - // Do we have an entry? + // Is there an entry? if (SQL_NUMROWS($result) == 1) { // Get it $data = SQL_FETCHARRAY($result); @@ -1116,7 +1120,7 @@ function getCurrentAdminId () { // Log debug message //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'called!'); - // Do we have cache? + // Is there cache? if (!isset($GLOBALS['current_admin_id'])) { // Get the admin login from session $adminId = getSession('admin_id'); @@ -1151,7 +1155,7 @@ function getAdminHash ($adminId) { $result = SQL_QUERY_ESC("SELECT `password` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `id`=%s LIMIT 1", array(bigintval($adminId)), __FUNCTION__, __LINE__); - // Do we have an entry? + // Is there an entry? if (SQL_NUMROWS($result) == 1) { // Fetch data $data = SQL_FETCHARRAY($result); @@ -1254,7 +1258,7 @@ function getAdminDefaultAcl ($adminId) { $result_admin_id = SQL_QUERY_ESC("SELECT `default_acl` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `id`=%s LIMIT 1", array(bigintval($adminId)), __FUNCTION__, __LINE__); - // Do we have an entry? + // Is there an entry? if (SQL_NUMROWS($result_admin_id) == 1) { // Fetch data $data = SQL_FETCHARRAY($result_admin_id); @@ -1291,7 +1295,7 @@ function getAdminMenuMode ($adminId) { $result_admin_id = SQL_QUERY_ESC("SELECT `la_mode` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `id`=%s LIMIT 1", array(bigintval($adminId)), __FUNCTION__, __LINE__); - // Do we have an entry? + // Is there an entry? if (SQL_NUMROWS($result_admin_id) == 1) { // Fetch data $data = SQL_FETCHARRAY($result_admin_id); @@ -1309,18 +1313,18 @@ function getAdminMenuMode ($adminId) { } // Generates an option list from various parameters -function generateOptions ($table, $id, $name, $default = '', $special = '', $whereStatement = '', $disabled = array(), $callback = '') { +function generateOptions ($table, $key, $value, $default = '', $extra = '', $whereStatement = '', $disabled = array(), $callback = '') { $ret = ''; if ($table == '/ARRAY/') { // Selection from array - if ((is_array($id)) && (is_array($name)) && ((count($id)) == (count($name)) || (!empty($callback)))) { + if ((is_array($key)) && (is_array($value)) && ((count($key)) == (count($value)) || (!empty($callback)))) { // Both are arrays - foreach ($id as $idx => $value) { - $ret .= ''; } // END - foreach } else { // Problem in request - reportBug(__FUNCTION__, __LINE__, 'Not all are arrays: id[' . count($id) . ']=' . gettype($id) . ',name[' . count($name) . ']=' . gettype($name) . ',callback=' . $callback); + reportBug(__FUNCTION__, __LINE__, 'Not all are arrays: key[' . count($key) . ']=' . gettype($key) . ',value[' . count($value) . ']=' . gettype($value) . ',callback=' . $callback); } } else { - // Data from database - $SPEC = ',`' . $id . '`'; - if (!empty($special)) { - $SPEC = ',`' . $special . '` AS `special`'; + /////////////////////// + // Data from database / + /////////////////////// + + // Init extra column (if requested) + $extraColumn = ''; + if (!empty($extra)) { + $extraColumn = ',`' . $extra . '` AS `extra`'; } // END - if - // Query the database - $result = SQL_QUERY_ESC("SELECT `%s` AS `id`,`%s` AS `name`".$SPEC." FROM `{?_MYSQL_PREFIX?}_%s` ".$whereStatement." ORDER BY `%s` ASC", + // Run SQL query + $result = SQL_QUERY_ESC("SELECT `%s` AS `key`,`%s` AS `value`" . $extraColumn . " FROM `{?_MYSQL_PREFIX?}_%s` " . $whereStatement . " ORDER BY `%s` ASC", array( - $id, - $name, + $key, + $value, $table, - $name + $value ), __FUNCTION__, __LINE__); - // Do we have rows? + // Is there rows? if (!SQL_HASZERONUMS($result)) { // Found data so add them as OPTION lines while ($content = SQL_FETCHARRAY($result)) { - // Is special set? - if (!isset($content['special'])) { + // Is extra set? + if (!isset($content['extra'])) { // Set it to empty - $content['special'] = ''; + $content['extra'] = ''; } // END - if - $ret .= ''; } // END - while } else { // No data found @@ -1420,7 +1428,7 @@ WHERE LIMIT 1", array(bigintval($userid)), __FUNCTION__, __LINE__); - // Do we have an entry? + // Is there an entry? if (SQL_NUMROWS($result) == 1) { // Save his points to add them to the jackpot $data = SQL_FETCHARRAY($result); @@ -1518,7 +1526,7 @@ function generateCategoryOptionsList ($mode, $userid = NULL) { $result = SQL_QUERY('SELECT `id`,`cat` FROM `{?_MYSQL_PREFIX?}_cats`' . $whereStatement . ' ORDER BY `sort` ASC', __FUNCTION__, __LINE__); - // Do we have entries? + // Are there entries? if (!SQL_HASZERONUMS($result)) { // ... and begin loading stuff while ($content = SQL_FETCHARRAY($result)) { @@ -1790,59 +1798,248 @@ LIMIT 1", } } -/** - * 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 '; + + // Get the sql part back from given array + $SQL .= getSqlPartFromXmlArray($columns); - // 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'"; + // 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 - // Is the 'subject' there? - 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()])) { - $dummy = $GLOBALS['previous_extension'][getCurrentExtensionName()]; - reportBug(__FUNCTION__, __LINE__, 'previous_extension[' . gettype($dummy) . ']=' . $dummy . ',getCurrentExtensionName()=' . getCurrentExtensionName() . ' - Under development, please report this!'); - } // 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 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__); - // Is the extension equal or newer 0.8.9? - if (isExtensionInstalledAndNewer('sql_patches', '0.8.9')) { - // Then add provider - $add = " AND `account_provider`='EXTENSION'"; + // 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=
'.print_r($args, true).'
'); + // @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=
'.print_r($columns,true).'
,filterFunctions=
'.print_r($filterFunctions,true).'
,extraValues=
'.print_r($extraValues,true).'
,POST=
'.print_r($_POST,true).'
'); + // 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=
'.print_r($columnIndex,true).'
'.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'])) . '
'); + + // 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]