X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fmodules%2Fadmin%2Fadmin-inc.php;h=0a5b93e134e771de3ff7a5fef891bdc4b539b293;hp=2fc9b17210f64f4a2e8239b30a437c47fc30c500;hb=0a7e0faba4feaf17432cbdcaf17eb7d2f3812a1e;hpb=3299d3eba008bfd2450d0f19d072126f98c78e1e diff --git a/inc/modules/admin/admin-inc.php b/inc/modules/admin/admin-inc.php index 2fc9b17210..0a5b93e134 100644 --- a/inc/modules/admin/admin-inc.php +++ b/inc/modules/admin/admin-inc.php @@ -300,7 +300,7 @@ function ADMIN_DO_ACTION($wht) // Check if action/what pair is valid $result = SQL_QUERY_ESC("SELECT id FROM "._MYSQL_PREFIX."_admin_menu -WHERE action='%s' AND ((what='%s' AND what != 'overview') OR (what='' AND '%s'='overview')) +WHERE action='%s' AND ((what='%s' AND what != 'overview') OR ((what='' OR what IS NULL) AND '%s'='overview')) LIMIT 1", array($act, $wht, $wht), __FILE__, __LINE__); if (SQL_NUMROWS($result) == 1) { @@ -308,7 +308,7 @@ LIMIT 1", array($act, $wht, $wht), __FILE__, __LINE__); SQL_FREERESULT($result); // Is valid but does the inlcude file exists? - $INC = sprintf(PATH."inc/modules/admin/action-%s.php", $act); + $INC = sprintf("%sinc/modules/admin/action-%s.php", PATH, $act); if ((file_exists($INC)) && (is_readable($INC)) && (VALIDATE_MENU_ACTION("admin", $act, $wht)) && (__ACL_ALLOW == true)) { // Ok, we finally load the admin action module @@ -346,7 +346,7 @@ function ADD_ADMIN_MENU($act, $wht,$return=false) $menuTitle = array(); // Build main menu - $result_main = SQL_QUERY("SELECT action, title, descr FROM "._MYSQL_PREFIX."_admin_menu WHERE what='' ORDER BY sort, id DESC", __FILE__, __LINE__); + $result_main = SQL_QUERY("SELECT action, title, descr FROM "._MYSQL_PREFIX."_admin_menu WHERE (what='' OR what IS NULL) ORDER BY sort, id DESC", __FILE__, __LINE__); $OUT = ""; if (SQL_NUMROWS($result_main) > 0) { @@ -380,7 +380,7 @@ function ADD_ADMIN_MENU($act, $wht,$return=false) } else { - $OUT .= "[ "; + $OUT .= "["; } $OUT .= $title; if (($menu == $act) && (empty($wht))) @@ -389,7 +389,7 @@ function ADD_ADMIN_MENU($act, $wht,$return=false) } else { - $OUT .= " ]"; + $OUT .= "]"; } $OUT .= " \n"; @@ -406,7 +406,7 @@ function ADD_ADMIN_MENU($act, $wht,$return=false) while (list($wht_sub, $title_what, $desc_what) = SQL_FETCHROW($result_what)) { // Filename - $INC = sprintf(PATH."inc/modules/admin/what-%s.php", $wht_sub); + $INC = sprintf("%sinc/modules/admin/what-%s.php", PATH, $wht_sub); if ((EXT_IS_ACTIVE("admins")) && (GET_EXT_VERSION("admins") > "0.2")) { $ACL = ADMINS_CHECK_ACL("", $wht_sub); @@ -433,7 +433,7 @@ function ADD_ADMIN_MENU($act, $wht,$return=false) } else { - $OUT .= "[ "; + $OUT .= "["; } } else @@ -449,7 +449,7 @@ function ADD_ADMIN_MENU($act, $wht,$return=false) } else { - $OUT .= " ]"; + $OUT .= "]"; } } else @@ -522,7 +522,7 @@ function ADD_MEMBER_SELECTION_BOX($add_all = false, $return = false, $none = fal // function ADMIN_MENU_SELECTION($MODE, $default="", $defid="") { $wht = "what != ''"; - if ($MODE == "action") $wht = "what='' AND action !='login'"; + if ($MODE == "action") $wht = "(what='' OR what IS NULL) AND action !='login'"; $result = SQL_QUERY_ESC("SELECT %s, title FROM "._MYSQL_PREFIX."_admin_menu WHERE ".$wht." ORDER BY sort", array($MODE), __FILE__, __LINE__); if (SQL_NUMROWS($result) > 0) @@ -746,7 +746,7 @@ function ADMIN_CHECK_MENU_MODE() // Change activation status function ADMIN_CHANGE_ACTIVATION_STATUS ($IDs, $table, $row, $idRow = "id") { global $_CONFIG; - $cnt = 0; $newStatus = 'Y'; + $cnt = 0; $newStatus = "Y"; if ((is_array($IDs)) && (count($IDs) > 0)) { // "Walk" all through and count them foreach ($IDs as $id=>$selected) { @@ -763,7 +763,7 @@ function ADMIN_CHANGE_ACTIVATION_STATUS ($IDs, $table, $row, $idRow = "id") { if (SQL_NUMROWS($result) == 1) { // Load the status list($currStatus) = SQL_FETCHROW($result); - if ($currStatus == 'Y') $newStatus='N'; else $newStatus = 'Y'; + if ($currStatus == "Y") $newStatus='N'; else $newStatus = "Y"; // Change this status SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_%s SET %s='%s' WHERE %s=%d LIMIT 1", @@ -793,9 +793,10 @@ function ADMIN_DELETE_ENTRIES_CONFIRM ($IDs, $table, $row, $columns = array(), $ // "Walk" through all entries and count them if ($deleteNow) { // Delete them + die("DELETE!"); } else { // List for confirmation - foreach ($IDs as $id=>$selected) { + foreach ($IDs as $id => $selected) { // Secure ID number $id = bigintval($id); @@ -837,6 +838,59 @@ function ADMIN_DELETE_ENTRIES_CONFIRM ($IDs, $table, $row, $columns = array(), $ } } } +// Edit rows by given ID numbers +function ADMIN_EDIT_ENTRIES_CONFIRM ($IDs, $table, $row, $columns = array(), $filterFunctions = array(), $editNow=false, $idRow="id") { + global $_CONFIG; + $OUT = ""; $SW = 2; + if ((is_array($IDs)) && (count($IDs) > 0)) { + // "Walk" through all entries and count them + if ($editNow) { + // Delete them + die("EDIT!"); + } else { + // List for confirmation + foreach ($IDs as $id => $selected) { + // Secure ID number + $id = bigintval($id); + + // Will always be 1 ;-) + if ($selected == 1) { + // Get result from a given column array and table name + $result = SQL_RESULT_FROM_ARRAY($table, $columns, $idRow, $id); + + // Is there one entry? + if (SQL_NUMROWS($result) == 1) { + // Load all data + $content = SQL_FETCHARRAY($result); + + // Filter all data + foreach ($content as $key=>$value) { + // Is a filter function set? + $idx = array_search($key, $columns, true); + if (!empty($filterFunctions[$idx])) { + // Then call it! + $content[$key] = call_user_func($filterFunctions[$idx], $value); + } + } + + // Add color switching + $content['sw'] = $SW; + + // Then list it again... + $OUT .= LOAD_TEMPLATE("admin_edit_".$table."_row", true, $content); + $SW = 3 - $SW; + } + + // Free the result + SQL_FREERESULT($result); + } + } + + // Load master template + LOAD_TEMPLATE("admin_edit_".$table."", false, $OUT); + } + } +} // Checks proxy settins by fetching check-updates2.php from www.mxchange.org function ADMIN_TEST_PROXY_SETTINGS ($settingsArray) { global $_CONFIG; @@ -850,10 +904,102 @@ function ADMIN_TEST_PROXY_SETTINGS ($settingsArray) { $content = MXCHANGE_OPEN("check-updates2.php"); // Is the first line with "200 OK"? - $valid = ereg("200 OK", $content[0]); + $valid = eregi("200 OK", $content[0]); + + // Return result + return $valid; +} +// Sends out a link to the given email adress so the admin can reset his/her password +function ADMIN_SEND_PASSWORD_RESET_LINK ($email) { + global $_CONFIG; + // Init output + $OUT = ""; + + // Compile out security characters (must be for looking up!) + $email = COMPILE_CODE($email); + + // Look up administator login + $result = SQL_QUERY_ESC("SELECT id, login, password FROM "._MYSQL_PREFIX."_admins WHERE email='%s' LIMIT 1", + array($email), __FILE__, __LINE__); + + // Is there an account? + if (SQL_NUMROWS($result) == 0) { + // No account found! + return ADMIN_NO_LOGIN_WITH_EMAIL; + } // END - if + + // Load all data + $content = SQL_FETCHARRAY($result); + + // Free result + SQL_FREERESULT($result); + + // Generate hash for reset link + $content['hash'] = generateHash(URL.":".$content['id'].":".$content['login'].":".$content['password'], substr($content['password'], 10)); + + // Remove some data + unset($content['id']); + unset($content['password']); + + // Prepare email + $mailText = LOAD_EMAIL_TEMPLATE("admin_reset_password", $content); + + // Send it out + SEND_EMAIL($email, ADMIN_RESET_PASS_LINK_SUBJ, $mailText); + + // Prepare output + return ADMIN_RESET_LINK_SENT; +} +// Validate hash and login for password reset +function ADMIN_VALIDATE_RESET_LINK_HASH_LOGIN ($hash, $login) { + // By default nothing validates... ;) + $valid = false; + + // Compile the login for lookup + $login = COMPILE_CODE($login); + + // Then try to find that user + $result = SQL_QUERY_ESC("SELECT id, password, email FROM "._MYSQL_PREFIX."_admins WHERE login='%s' LIMIT 1", + array($login), __FILE__, __LINE__); + + // Is an account here? + if (SQL_NUMROWS($result) == 1) { + // Load all data + $content = SQL_FETCHARRAY($result); + + // Generate hash again + $hashFromData = generateHash(URL.":".$content['id'].":".$login.":".$content['password'], substr($content['password'], 10)); + + // Does both match? + $valid = ($hash == $hashFromData); + } // END - if + + // Free result + SQL_FREERESULT($result); // Return result return $valid; } +// Reset the password for the login. Do NOT call this function without calling above function first! +function ADMIN_RESET_PASSWORD ($login, $password) { + // Init hash + $passHash = ""; + + // Now check if we have sql_patches installed + if (GET_EXT_VERSION("sql_patches") >= "0.3.6") { + // Use new way of hashing + $passHash = generateHash($password); + } else { + // Old MD5 method + $passHash = md5($password); + } + + // Update database + SQL_QUERY_ESC("UPDATE "._MYSQL_PREFIX."_admins SET password='%s' WHERE login='%s' LIMIT 1", + array($passHash, $login), __FILE__, __LINE__); + + // Return output + return ADMIN_PASSWORD_RESET_DONE; +} // ?>