X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fmodules%2Fadmin%2Fadmin-inc.php;h=18f99003fc417a312f80e05394738a35b803b343;hp=083e290725ca339d6baa354c0213c4e083a1f819;hb=05ac410a5adaa49c99b6eeae4bef60f2994f1575;hpb=3f7f0051c91c54cb691303b9d49fb9cd1a7a4e8c diff --git a/inc/modules/admin/admin-inc.php b/inc/modules/admin/admin-inc.php index 083e290725..18f99003fc 100644 --- a/inc/modules/admin/admin-inc.php +++ b/inc/modules/admin/admin-inc.php @@ -97,7 +97,7 @@ function ifAdminLoginDataIsValid ($adminLogin, $adminPassword) { // All fine $ret = 'done'; } else { - // Set status + // Did not match! $ret = 'password'; } } // END - if @@ -751,7 +751,7 @@ function adminChangeActivationStatus ($IDs, $table, $row, $idRow = 'id') { } // Send mails for del/edit/lock build modes -function sendAdminBuildMails ($mode, $table, $content, $id, $subjectPart = '', $userid = 'userid') { +function sendAdminBuildMails ($mode, $table, $content, $id, $subjectPart = '', $userIdColumn = 'userid') { // Default subject is the subject part $subject = $subjectPart; @@ -762,7 +762,7 @@ function sendAdminBuildMails ($mode, $table, $content, $id, $subjectPart = '', $ } // END - if // Is the raw userid set? - if (postRequestParameter($useridColumn, $id) > 0) { + if (postRequestParameter($userIdColumn, $id) > 0) { // Load email template if (!empty($subjectPart)) { $mail = loadEmailTemplate('member_' . $mode . '_' . strtolower($subjectPart) . '_' . $table, $content); @@ -771,7 +771,7 @@ function sendAdminBuildMails ($mode, $table, $content, $id, $subjectPart = '', $ } // Send email out - sendEmail(postRequestParameter($useridColumn, $id), strtoupper('{--MEMBER_' . $subject . '_' . $table . '_SUBJECT--}'), $mail); + sendEmail(postRequestParameter($userIdColumn, $id), strtoupper('{--MEMBER_' . $subject . '_' . $table . '_SUBJECT--}'), $mail); } // END - if // Generate subject @@ -779,14 +779,23 @@ function sendAdminBuildMails ($mode, $table, $content, $id, $subjectPart = '', $ // Send admin notification out if (!empty($subjectPart)) { - sendAdminNotification($subject, 'admin_' . $mode . '_' . strtolower($subjectPart) . '_' . $table, $content, postRequestParameter($useridColumn, $id)); + sendAdminNotification($subject, 'admin_' . $mode . '_' . strtolower($subjectPart) . '_' . $table, $content, postRequestParameter($userIdColumn, $id)); } else { - sendAdminNotification($subject, 'admin_' . $mode . '_' . $table, $content, postRequestParameter($useridColumn, $id)); + sendAdminNotification($subject, 'admin_' . $mode . '_' . $table, $content, postRequestParameter($userIdColumn, $id)); } } // Build a special template list function adminListBuilder ($listType, $IDs, $table, $columns, $filterFunctions, $extraValues, $idColumn, $userIdColumn, $userid = 'userid') { + // $table and $idColumn must bove be arrays! + if (!is_array($table)) { + // $table is no array + debug_report_bug(__FUNCTION__, __LINE__, 'table[]=' . gettype($table) . '!=array'); + } elseif (!is_array($idColumn)) { + // $idColumn is no array + debug_report_bug(__FUNCTION__, __LINE__, 'idColumn[]=' . gettype($idColumn) . '!=array'); + } + $OUT = ''; // "Walk" through all entries @@ -795,7 +804,7 @@ function adminListBuilder ($listType, $IDs, $table, $columns, $filterFunctions, $id = bigintval($id); // Get result from a given column array and table name - $result = SQL_RESULT_FROM_ARRAY($table, $columns, $idColumn, $id, __FUNCTION__, __LINE__); + $result = SQL_RESULT_FROM_ARRAY($table[0], $columns, $idColumn[0], $id, __FUNCTION__, __LINE__); // Is there one entry? if (SQL_NUMROWS($result) == 1) { @@ -823,13 +832,17 @@ function adminListBuilder ($listType, $IDs, $table, $columns, $filterFunctions, // Handle the call in external function //* DEBUG: */ debugOutput('key=' . $key . ',fucntion=' . $filterFunctions[$idx] . ',value=' . $value); - $content[$key] = handleExtraValues($filterFunctions[$idx], $value, $extraValues[$idx]); + $content[$key] = handleExtraValues( + $filterFunctions[$idx], + $value, + $extraValues[$idx] + ); } // END - foreach // Then list it $OUT .= loadTemplate(sprintf("admin_%s_%s_row", $listType, - $table + $table[0] ), true, $content ); } // END - if @@ -841,7 +854,7 @@ function adminListBuilder ($listType, $IDs, $table, $columns, $filterFunctions, // Load master template loadTemplate(sprintf("admin_%s_%s", $listType, - $table + $table[0] ), false, $OUT ); } @@ -873,7 +886,7 @@ function adminBuilderStatusHandler ($mode, $IDs, $table, $columns, $filterFuncti // Does the entry exist? if ((isset($content[$column])) && (isset($statusInfo[$content[$column]]))) { // Add these entries for update - $sql .= sprintf(" %s='%s',", SQL_ESCAPE($column), SQL_ESCAPE($statusInfo[$content[$column]])); + $sql .= sprintf(" `%s`='%s',", SQL_ESCAPE($column), SQL_ESCAPE($statusInfo[$content[$column]])); // Remember status if ($statusColumn == 'unknown') { @@ -898,10 +911,10 @@ function adminBuilderStatusHandler ($mode, $IDs, $table, $columns, $filterFuncti // Are there brackets () at the end? if (substr($entries[$id], -2, 2) == '()') { // Direct SQL command found - $sql .= sprintf(" %s=%s,", SQL_ESCAPE($key), SQL_ESCAPE($entries[$id])); + $sql .= sprintf(" `%s`=%s,", SQL_ESCAPE($key), SQL_ESCAPE($entries[$id])); } else { // Add regular entry - $sql .= sprintf(" %s='%s',", SQL_ESCAPE($key), SQL_ESCAPE($entries[$id])); + $sql .= sprintf(" `%s`='%s',", SQL_ESCAPE($key), SQL_ESCAPE($entries[$id])); // Add entry $content[$key] = $entries[$id]; @@ -930,7 +943,7 @@ function adminBuilderStatusHandler ($mode, $IDs, $table, $columns, $filterFuncti } // END - if // Send "build mails" out - sendAdminBuildMails($mode, $table, $content, $id, $statusInfo[$content[$column]]); + sendAdminBuildMails($mode, $table, $content, $id, $statusInfo[$content[$column]], $userIdColumn); } // END - foreach } // END - if } @@ -964,7 +977,7 @@ function adminDeleteEntriesConfirm ($IDs, $table, $columns = array(), $filterFun SQL_FREERESULT($result); // Send "build mails" out - sendAdminBuildMails('delete', $table, $content, $id); + sendAdminBuildMails('delete', $table, $content, $id, '', $userIdColumn); } // END - if // Add id number @@ -1060,7 +1073,7 @@ function adminEditEntriesConfirm ($IDs, $table, $columns = array(), $filterFunct SQL_FREERESULT($result); // Send "build mails" out - sendAdminBuildMails('edit', $table, $content, $id); + sendAdminBuildMails('edit', $table, $content, $id, '', $userIdColumn); } // END - foreach // Was this fine? @@ -1075,7 +1088,10 @@ function adminEditEntriesConfirm ($IDs, $table, $columns = array(), $filterFunct // List for editing adminListBuilder('edit', $IDs, $table, $columns, $filterFunctions, $extraValues, $idColumn, $userIdColumn); } - } // END - if + } else { + // Maybe some invalid parameters + debug_report_bug(__FUNCTION__, __LINE__, 'IDs[]=' . gettype($IDs) . ',table=' . $table . ',columns[]=' . gettype($columns) . ',filterFunctions[]=' . gettype($filterFunctions) . ',extraValues[]=' . gettype($extraValues) . ',idColumn=' . $idColumn . ',userIdColumn=' . $userIdColumn . ' - INVALID!'); + } } // Un-/lock rows by given id numbers @@ -1108,6 +1124,134 @@ function adminUndeleteEntriesConfirm ($IDs, $table, $columns=array(), $filterFun } // END - if } +// List all given rows (callback function from XML) +function adminListEntries ($tableTemplate, $rowTemplate, $noEntryMessageId, $tableName, $columns, $whereColumns, $orderByColumns, $callbackColumns, $extraParameters = array()) { + // Verify that tableName and columns are not empty + if (count($tableName) != 1) { + // No tableName specified + debug_report_bug(__FUNCTION__, __LINE__, 'tableName is not given. Please fix your XML. tableTemplate=' . $tableTemplate . ',rowTemplate=' . $rowTemplate); + } elseif (count($columns) == 0) { + // No columns specified + debug_report_bug(__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 '; + 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 + + // Remove last commata and add FROM statement + $SQL = substr($SQL, 0, -1) . ' 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'] . "'" . $whereColumns[0]['look_for'] . "'"; + } else { + // More than one entry -> Unsupported + debug_report_bug(__FUNCTION__, __LINE__, 'More than one WHERE statement found. This is currently not supported.'); + } + } // 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 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 + doAdminListEntries($SQL, $tableTemplate, $noEntryMessageId, $rowTemplate, $callbackColumns, $extraParameters = array()); +} + +// Do the listing of entries +function doAdminListEntries ($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 $column=>$callbackFunction) { + // Fill the callback arguments + $args = array($content[$column]); + + // Do we have more to add? + if (isset($extraParameters[$column])) { + // Add them as well + merge_array($args, $extraParameters[$column]); + } // END - if + + // Call the callback-function + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'callbackFunction=' . $callbackFunction . ',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[$column] = call_user_func_array($callbackFunction, $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 . '--}'); + } + + // Free result + SQL_FREERESULT($result); +} + // Checks proxy settins by fetching check-updates3.php from www.mxchange.org function adminTestProxySettings ($settingsArray) { // Set temporary the new settings @@ -1194,12 +1338,17 @@ function doResetAdminPassword ($login, $password) { // Generate hash (we already check for sql_patches in generateHash()) $passHash = generateHash($password); + // Prepare fake POST data + $postData = array( + 'login' => array(getAdminId($login) => $login), + 'password' => array(getAdminId($login) => $passHash), + ); + // Update database - SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_admins` SET `password`='%s' WHERE `login`='%s' LIMIT 1", - array($passHash, $login), __FUNCTION__, __LINE__); + $message = adminsChangeAdminAccount($postData, '', false); // Run filters - runFilterChain('post_form_reset_pass', array('login' => $login, 'hash' => $passHash)); + runFilterChain('post_form_reset_pass', array('login' => $login, 'hash' => $passHash, 'message' => $message)); // Return output return '{--ADMIN_PASSWORD_RESET_DONE--}';