X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=inc%2Fmysql-manager.php;h=ce649cdd36ef09f474ece96e26443566451dbc95;hb=96d8f54d3fee1d51c38dd6b79c28215f7f5c83ec;hp=4b9ee0e0138ad015586eaf8baec4091bb696f930;hpb=0851db137e420b90617f47b77de2302e770f5f02;p=mailer.git diff --git a/inc/mysql-manager.php b/inc/mysql-manager.php index 4b9ee0e013..ce649cdd36 100644 --- a/inc/mysql-manager.php +++ b/inc/mysql-manager.php @@ -16,8 +16,8 @@ * $Author:: $ * * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * - * Copyright (c) 2009 - 2011 by Mailer Developer Team * - * For more information visit: http://www.mxchange.org * + * 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 * * it under the terms of the GNU General Public License as published by * @@ -42,11 +42,20 @@ if (!defined('__SECURITY')) { // "Getter" for module description // @TODO Can we cache this? -function getTitleFromMenu ($mode, $what, $column = 'what', $ADD='') { +function getTitleFromMenu ($mode, $what, $column = 'what', $ADD = '') { + // Debug message + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'mode=' . $mode . ',what=' . $what . ',column=' . $column . ',add=' . $ADD); + // Fix empty 'what' if (empty($what)) { $what = getIndexHome(); - } // END - if + } elseif ((isGetRequestElementSet('action')) && ($column == 'what')) { + // Get it from action + return getTitleFromMenu($mode, getAction(), 'action', $ADD); + } elseif ($what == 'welcome') { + // Overview page + return '{--WHAT_IS_WELCOME--}'; + } // Default is not found $data['title'] = '??? (' . $what . ')'; @@ -78,7 +87,7 @@ function addYouAreHereLink ($accessLevel, $FQFN, $return = false) { $file = basename($FQFN); // Init variables - $LINK_ADD = ''; + $linkAdd = ''; $OUT = ''; $ADD = ''; $prefix = ''; @@ -98,13 +107,16 @@ function addYouAreHereLink ($accessLevel, $FQFN, $return = false) { // This is a 'what file'! $type = 'what'; $search = substr($file, 5); - $ADD = " AND `visible`='Y' AND `locked`='N'"; // Get access level from it $modCheck = getModuleFromFileName($file, $accessLevel); - // Do we have admin? Then display all - if (isAdmin()) $ADD = ''; + // Is there admin? Then display all + $ADD = " AND `visible`='Y' AND `locked`='N'"; + if (isAdmin()) { + // Display all! + $ADD = ''; + } // END - if $dummy = substr($search, 0, -4); $ADD .= sprintf(" AND `action`='%s'", getActionFromModuleWhat($accessLevel, $dummy)); @@ -113,13 +125,11 @@ function addYouAreHereLink ($accessLevel, $FQFN, $return = false) { $type = 'what'; $search = $file; $modCheck = getModule(); - $ADD = ''; } else { // Other $type = 'menu'; $search = $file; $modCheck = getModule(); - $ADD = ''; } // Begin the navigation line @@ -128,17 +138,19 @@ function addYouAreHereLink ($accessLevel, $FQFN, $return = false) { $GLOBALS['nav_depth'] = '0'; // Run the pre-filter chain - $ret = runFilterChain('pre_youhere_line', array('access_level' => $accessLevel, 'type' => $type, 'content' => '')); + $ret = runFilterChain('pre_youhere_line', array('access_level' => $accessLevel, 'type' => $type, 'search' => $search, 'prefix' => $prefix, 'link_add' => $linkAdd, 'content' => '', 'add' => $ADD)); // Add pre-content $prefix = $ret['content']; - $prefix .= '
'.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 { - /* - * Having no entry is not bad but it means that all points will go to - * the general account which the user can let payout. - */ - logDebugMessage(__FUNCTION__, __LINE__, 'ext_name=' . $ext_name . ' - No entry found, switching to general points account.'); + // No URLs in surfbar + displayMessage('{--' .$noEntryMessageId[0] . '--}'); } // Free result SQL_FREERESULT($result); - - // Return it - return $GLOBALS['cache_array']['points_data'][$ext_name]; } -// Determines the right points column name for given extension and 'locked' -function getPointsColumnNameFromExtensionNameLocked ($ext_name, $isLocked) { - // Extension sql_patches must be up-to-date - if (isExtensionInstalledAndOlder('sql_patches', '0.8.0')) { - // Please update ext-sql_patches - debug_report_bug(__FUNCTION__, __LINE__, 'sql_patches is out-dated. Please update to at least 0.8.0 to continue. ext_name=' . $ext_name . ',isLocked=' . intval($isLocked)); +// 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 - // Get the points_data entry - $pointsData = getPointsDataArrayFromExtensionName($ext_name); + // 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'])) . '
'.print_r($entries,true).''); + + // Is entries an array? + if (($key != $idColumn[0]) && (is_array($entries)) && (isset($entries[$id]))) { + // Add this entry to content + $content[$key] = $entries[$id]; + + // Send data through the filter function if found + if ($key == $userIdColumn[0]) { + // Is the userid, we have to process it with convertZeroToNull() + $entries[$id] = convertZeroToNull($entries[$id]); + } elseif ((isset($filterFunctions[$key])) && (isset($extraValues[$key]))) { + // Filter function set! + $entries[$id] = handleExtraValues($filterFunctions[$key], $entries[$id], $extraValues[$key]); + } + + // Is the value NULL? + if ($entries[$id] == 'NULL') { + // Add it directly + $sql .= sprintf(' `%s`=NULL,', + SQL_ESCAPE($key) + ); + } else { + // Else add the value covered + $sql .= sprintf(" `%s`='%s',", + SQL_ESCAPE($key), + SQL_ESCAPE($entries[$id]) + ); + } + } elseif (($key != $idColumn[0]) && (!is_array($entries))) { + // Add normal entries as well! + $content[$key] = $entries; + } + } // END - foreach + + // Finish SQL command + $sql = substr($sql, 0, -1) . " WHERE `" . SQL_ESCAPE($idColumn[0]) . "`=" . bigintval($id); + if ((isset($rawUserId[0])) && (isPostRequestElementSet($rawUserId[0])) && (isset($userIdColumn[0]))) { + // Add user id as well + $sql .= ' AND `' . $userIdColumn[0] . '`=' . bigintval(postRequestElement($rawUserId[0])); + } // END - if + $sql .= " LIMIT 1"; + + // Run this query + SQL_QUERY($sql, __FUNCTION__, __LINE__); + + // Add affected rows + $edited = SQL_AFFECTEDROWS(); + $affected += $edited; + + // Load all data from that id + $result = SQL_QUERY_ESC("SELECT * FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`=%s LIMIT 1", + array( + $tableName[0], + $idColumn[0], + $id + ), __FUNCTION__, __LINE__); + + // Fetch the data and merge it into $content + $content = merge_array($content, SQL_FETCHARRAY($result)); + + // Prepare filter data array + $filterData = array( + 'mode' => 'edit', + 'table_name' => $tableName, + 'content' => $content, + 'id' => $id, + 'subject' => '', + 'userid_column' => $userIdColumn, + 'raw_userid' => $rawUserId, + 'affected' => $edited, + 'sql' => $sql, + ); + + // Send "build mail" out + runFilterChain('send_build_mail', $filterData); + + // Free the result + SQL_FREERESULT($result); + } // END - foreach + + // Delete cache? + if ((count($cacheFiles) > 0) && (!empty($cacheFiles[0]))) { + // Delete cache file(s) + foreach ($cacheFiles as $cache) { + // Skip any empty entries + if (empty($cache)) { + // This may cause trouble in loadCacheFile() + continue; + } // END - if + + // Is the cache file loadable? + if ($GLOBALS['cache_instance']->loadCacheFile($cache)) { + // Then remove it + $GLOBALS['cache_instance']->removeCacheFile(); + } // END - if + } // END - foreach + } // END - if + + // Return affected rows + return $affected; } -// Determines the payment method for given extension and 'locked' -function getPaymentMethodFromExtensionName ($ext_name) { - // Extension sql_patches must be up-to-date - if (isExtensionInstalledAndOlder('sql_patches', '0.8.0')) { - // Please update ext-sql_patches - debug_report_bug(__FUNCTION__, __LINE__, 'sql_patches is out-dated. Please update to at least 0.8.0 to continue. ext_name=' . $ext_name . ',isLocked=' . intval($isLocked)); +// Delete rows by given id numbers +function doGenericDeleteEntriesConfirm ($tableName, $columns = array(), $filterFunctions = array(), $extraValues = array(), $deleteNow = array(false), $idColumn = array('id'), $userIdColumn = array('userid'), $rawUserId = array('userid'), $cacheFiles = array()) { + // The base SQL command: + $sql = "DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s` IN (%s)"; + + // Is a user id provided? + if ((isset($rawUserId[0])) && (isPostRequestElementSet($rawUserId[0])) && (isset($userIdColumn[0]))) { + // Add user id as well + $sql .= ' AND `' . $userIdColumn[0] . '`=' . bigintval(postRequestElement($rawUserId[0])); } // END - if - // Get the points_data entry - $pointsData = getPointsDataArrayFromExtensionName($ext_name); + // Delete them all + $idList = ''; + foreach (postRequestElement($idColumn[0]) as $id => $sel) { + // Is there a userid? + if (isPostRequestElementSet($userIdColumn[0])) { + // Load all data from that id + $result = SQL_QUERY_ESC("SELECT * FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`=%s LIMIT 1", + array( + $tableName[0], + $idColumn[0], + $id + ), __FUNCTION__, __LINE__); - // Regular points by default - $paymentMethod = $pointsData['payment_method']; + // Fetch the data + $content = SQL_FETCHARRAY($result); - // Return the result - return $paymentMethod; + // Free the result + SQL_FREERESULT($result); + + // Send "build mails" out + sendGenericBuildMails('delete', $tableName, $content, $id, '', $userIdColumn); + } // END - if + + // Add id number + $idList .= $id . ','; + } // END - foreach + + // Run the query + SQL_QUERY_ESC($sql, array($tableName[0], $idColumn[0], substr($idList, 0, -1)), __FUNCTION__, __LINE__); + + // Return affected rows + return SQL_AFFECTEDROWS(); +} + +// Build a special template list +function doGenericListBuilder ($prefix, $listType, $tableName, $columns, $filterFunctions, $extraValues, $idColumn, $userIdColumn, $rawUserId = array('userid')) { + // $tableName and $idColumn must bove be arrays! + if ((!is_array($tableName)) || (count($tableName) != 1)) { + // $tableName is no array + reportBug(__FUNCTION__, __LINE__, 'tableName[]=' . gettype($tableName) . '!=array: userIdColumn=' . $userIdColumn); + } elseif (!is_array($idColumn)) { + // $idColumn is no array + reportBug(__FUNCTION__, __LINE__, 'idColumn[]=' . gettype($idColumn) . '!=array: userIdColumn=' . $userIdColumn); + } elseif ((!is_array($userIdColumn)) || (count($userIdColumn) != 1)) { + // $tableName is no array + reportBug(__FUNCTION__, __LINE__, 'userIdColumn[]=' . gettype($userIdColumn) . '!=array: userIdColumn=' . $userIdColumn); + } + + // Init row output + $OUT = ''; + + // "Walk"Â through all entries + //* DEBUG: */ reportBug(__FUNCTION__, __LINE__, 'listType=
'.print_r($listType,true).',tableName
'.print_r($tableName,true).',columns=
'.print_r($columns,true).',filterFunctions=
'.print_r($filterFunctions,true).',extraValues=
'.print_r($extraValues,true).',idColumn=
'.print_r($idColumn,true).',userIdColumn=
'.print_r($userIdColumn,true).',rawUserId=
'.print_r($rawUserId,true).''); + foreach (postRequestElement($idColumn[0]) as $id => $selected) { + // Secure id number + $id = bigintval($id); + + // Get result from a given column array and table name + $result = SQL_RESULT_FROM_ARRAY($tableName[0], $columns, $idColumn[0], $id, __FUNCTION__, __LINE__); + + // Is there one entry? + if (SQL_NUMROWS($result) == 1) { + // Load all data + $content = SQL_FETCHARRAY($result); + + // Filter all data + foreach ($content as $key => $value) { + // Search index + $idx = searchXmlArray($key, $columns, 'column'); + + // Skip any missing entries + if ($idx === false) { + // Skip this one + //* DEBUG: */ reportBug(__FUNCTION__, __LINE__, 'key=' . $key . ' - SKIPPED!'); + continue; + } // END - if + + //Â Is there a userid? + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'key=' . $key . ',userIdColumn=' . $userIdColumn[0]); + if ($key == $userIdColumn[0]) { + // Add it again as raw id + //* DEBUG: */ reportBug(__FUNCTION__, __LINE__, 'key=' . $key . ',userIdColumn=' . $userIdColumn[0]); + $content[$userIdColumn[0]] = convertZeroToNull($value); + $content[$userIdColumn[0] . '_raw'] = $content[$userIdColumn[0]]; + } // END - if + + // If the key matches the idColumn variable, we need to temporary remember it + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'key=' . $key . ',idColumn=' . $idColumn[0] . ',value=' . $value); + if ($key == $idColumn[0]) { + /* + * Found, so remember it securely (to make sure only id + * numbers can pass, don't use alpha-numerical values!) + */ + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'value=' . $value . ' - set as ' . $prefix . '_list_builder_id_value!'); + $GLOBALS[$prefix . '_list_builder_id_value'] = bigintval($value); + } // END - if + + // Is there a call-back function and extra-value pair? + if ((isset($filterFunctions[$idx])) && (isset($extraValues[$idx]))) { + // Handle the call in external function + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, '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: */ logDebugMessage(__FUNCTION__, __LINE__, '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 + $OUT .= loadTemplate(sprintf("%s_%s_%s_row", + $prefix, + $listType, + $tableName[0] + ), true, $content + ); + } // END - if + + // Free the result + SQL_FREERESULT($result); + } // END - foreach + + // Load master template + loadTemplate(sprintf("%s_%s_%s", + $prefix, + $listType, + $tableName[0] + ), false, $OUT + ); +} + +// Checks whether given URL is blacklisted +function isUrlBlacklisted ($url) { + // Mark it as not listed by default + $listed = false; + + // Is black-listing enbaled? + if (!isUrlBlacklistEnabled()) { + // No, then all URLs are not in this list + return false; + } elseif (!isset($GLOBALS['blacklist_data'][$url])) { + // Check black-list for given URL + $result = SQL_QUERY_ESC("SELECT UNIX_TIMESTAMP(`timestamp`) AS `blist_timestamp` FROM `{?_MYSQL_PREFIX?}_url_blacklist` WHERE `url`='%s' LIMIT 1", + array($url), __FILE__, __LINE__); + + // Is there an entry? + if (SQL_NUMROWS($result) == 1) { + // Jupp, we got one listed + $GLOBALS['blacklist_data'][$url] = SQL_FETCHARRAY($result); + + // Mark it as listed + $listed = true; + } // END - if + + // Free result + SQL_FREERESULT($result); + } else { + // Is found in cache -> black-listed + $listed = true; + } + + // Return result + return $listed; } // [EOF]