'NO-ACL' is more clear that we don't have an ACL for the given admin than three aster...
[mailer.git] / inc / libs / admins_functions.php
index 3ec0d018869a6c7d6a770bb94d0266f6822b8ad7..c1987fb465b8c4cfd7b5841f26f25a63ab040f4f 100644 (file)
  * $Date::                                                            $ *
  * $Tag:: 0.2.1-FINAL                                                 $ *
  * $Author::                                                          $ *
- * Needs to be in all Files and every File needs "svn propset           *
- * svn:keywords Date Revision" (autoprobset!) at least!!!!!!            *
  * -------------------------------------------------------------------- *
  * Copyright (c) 2003 - 2009 by Roland Haeder                           *
- * Copyright (c) 2009, 2010 by Mailer Developer Team                    *
+ * Copyright (c) 2009 - 2011 by Mailer Developer Team                   *
  * For more information visit: http://www.mxchange.org                  *
  *                                                                      *
  * This program is free software; you can redistribute it and/or modify *
@@ -43,17 +41,21 @@ if (!defined('__SECURITY')) {
 }
 
 // Check ACL for menu combination
-function adminsCheckAdminAcl ($action, $what) {
-       // If action is login or logout allow allways!
-       $default = 'allow';
-       if (($action == 'login') || ($action == 'logout')) return true;
-
-       // Default is deny
-       $ret = false;
-
+function isAdminsAllowedByAcl ($action, $what) {
        // Get admin's id
        $adminId = getCurrentAdminId();
 
+       if (($action == 'login') || ($action == 'logout')) {
+               // If action is login or logout allow allways!
+               return true;
+       } elseif (isset($GLOBALS[__FUNCTION__][$adminId][$action][$what])) {
+               // If we have cache, use it
+               return $GLOBALS[__FUNCTION__][$adminId][$action][$what];
+       }
+
+       // But default result is failed
+       $GLOBALS[__FUNCTION__][$action][$what] = false;
+
        // Get admin's defult access right
        $default = getAdminDefaultAcl($adminId);
 
@@ -63,31 +65,43 @@ function adminsCheckAdminAcl ($action, $what) {
                $parent_action = getActionFromModuleWhat('admin', $what);
 
                // Check with this function...
-               $parent = adminsCheckAdminAcl($parent_action, '');
+               $parent = isAdminsAllowedByAcl($parent_action, '');
        } else {
                // Anything else is true!
                $parent = false;
        }
 
        // Shall I test for a main or sub menu? (action or what?)
-       $acl_mode = 'failed';
+       $aclMode = 'failed';
        if ((isExtensionInstalledAndNewer('cache', '0.1.2')) && (isset($GLOBALS['cache_array']['admin_acls'])) && (count($GLOBALS['cache_array']['admin_acls']) > 0)) {
                // Lookup in cache
-               if ((!empty($action)) && (isset($GLOBALS['cache_array']['admin_acls']['action_menu'][$adminId])) & ($GLOBALS['cache_array']['admin_acls']['action_menu'][$adminId] == $action)) {
+               if ((!empty($action)) && (isset($GLOBALS['cache_array']['admin_acls']['action_menu'][$adminId])) & (in_array($action, $GLOBALS['cache_array']['admin_acls']['action_menu'][$adminId]))) {
+                       // Search for it
+                       $key = array_search($action, $GLOBALS['cache_array']['admin_acls']['action_menu'][$adminId]);
+
                        // Main menu line found
-                       $acl_mode = $GLOBALS['cache_array']['admin_acls']['access_mode'][$adminId];
+                       $aclMode = $GLOBALS['cache_array']['admin_acls']['access_mode'][$adminId][$key];
+
+                       // Log debug message
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'action=' . $action . ',key=' . $key . ',acl_mode=' . $aclMode);
 
                        // Count cache hits
                        incrementStatsEntry('cache_hits');
-               } elseif ((!empty($what)) && (isset($GLOBALS['cache_array']['admin_acls']['what_menu'][$adminId])) && ($GLOBALS['cache_array']['admin_acls']['what_menu'][$adminId] == $what)) {
+               } elseif ((!empty($what)) && (isset($GLOBALS['cache_array']['admin_acls']['what_menu'][$adminId])) && (in_array($what, $GLOBALS['cache_array']['admin_acls']['what_menu'][$adminId]))) {
+                       // Search for it
+                       $key = array_search($action, $GLOBALS['cache_array']['admin_acls']['what_menu'][$adminId]);
+
                        // Check sub menu
-                       $acl_mode = $GLOBALS['cache_array']['admin_acls']['access_mode'][$adminId];
+                       $aclMode = $GLOBALS['cache_array']['admin_acls']['access_mode'][$adminId][$key];
+
+                       // Log debug message
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'what=' . $what . ',key=' . $key . ',acl_mode=' . $aclMode);
 
                        // Count cache hits
                        incrementStatsEntry('cache_hits');
                }
        } elseif (!isExtensionActive('cache')) {
-               // Old version, so load it from database
+               // Extension ext-cache is absent, so load it from database
                $result = false;
                if (!empty($action)) {
                        // Main menu
@@ -102,7 +116,7 @@ function adminsCheckAdminAcl ($action, $what) {
                // Is an entry found?
                if (SQL_NUMROWS($result) == 1) {
                        // Load ACL
-                       list($acl_mode) = SQL_FETCHROW($result);
+                       list($aclMode) = SQL_FETCHROW($result);
                } // END - if
 
                // Free memory
@@ -110,15 +124,15 @@ function adminsCheckAdminAcl ($action, $what) {
        }
 
        // Check ACL and (maybe) allow
-       //* DEBUG: */ print 'default='.$default.',acl_mode='.$acl_mode.',parent='.intval($parent).'<br />';
-       if (($default == 'allow') || (($default == 'deny') && ($acl_mode == 'allow')) || ($parent === true) || (($default == '***') && ($acl_mode == 'failed') && ($parent === false))) {
+       //* DEBUG: */ debugOutput('default='.$default.',acl_mode='.$aclMode.',parent='.intval($parent));
+       if ((($default == 'allow') && ($aclMode != 'deny')) || (($default == 'deny') && ($aclMode == 'allow')) || ($parent === true) || (($default == 'NO-ACL') && ($aclMode == 'failed') && ($parent === false))) {
                // Access is granted
-               $ret = true;
+               $GLOBALS[__FUNCTION__][$adminId][$action][$what] = true;
        } // END - if
 
        // Return value
-       //* DEBUG: */ outputHtml(__FUNCTION__."[".__LINE__."]:act={$action},wht={$whatOR},default={$default},acl_mode={$acl_mode}<br />");
-       return $ret;
+       //* DEBUG: */ debugOutput(__FUNCTION__.'['.__LINE__.']:act='.$action.',wht='.$what.',default='.$default.',aclMode='.$aclMode);
+       return $GLOBALS[__FUNCTION__][$adminId][$action][$what];
 }
 
 // Create email link to admins's account
@@ -166,10 +180,10 @@ function adminsChangeAdminAccount ($postData, $element = '') {
                if ((!empty($element)) && (isset($postData[$element]))) {
                        // Save this setting
                        SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_admins` SET `%s`='%s' WHERE `id`=%s LIMIT 1",
-                               array($element, $postData[$element][$id], $id), __FILE__, __LINE__);
+                               array($element, $postData[$element][$id], $id), __FUNCTION__, __LINE__);
 
                        // Admin account saved
-                       $message = getMessage('ADMIN_ACCOUNT_SAVED');
+                       $message = '{--ADMIN_ACCOUNT_SAVED--}';
                } elseif ((isset($postData['pass1'])) && (isset($postData['pass2']))) {
                        // Update only if both passwords match
                        if (($postData['pass1'][$id] == $postData['pass2'][$id])) {
@@ -189,17 +203,19 @@ function adminsChangeAdminAccount ($postData, $element = '') {
                                // Rewrite cookie when it's own account
                                if ($adminId == $id) {
                                        // Set timeout cookie
-                                       setSession('admin_last', time());
+                                       setAdminLast(time());
 
-                                       if ($login != getSession('admin_login')) {
+                                       if ($adminId != getCurrentAdminId()) {
                                                // Update login cookie
-                                               setSession('admin_login', $login);
+                                               setAdminId($adminId);
 
                                                // Update password cookie as well?
-                                               if (!empty($add)) setSession('admin_md5', $hash);
-                                       } elseif (generateHash($postData['pass1'][$id], $salt) != getSession('admin_md5')) {
+                                               if (!empty($add)) {
+                                                       setAdminMd5($hash);
+                                               } // END - if
+                                       } elseif (generateHash($postData['pass1'][$id], $salt) != getAdminMd5()) {
                                                // Update password cookie
-                                               setSession('admin_md5', $hash);
+                                               setAdminMd5($hash);
                                        }
                                } // END - if
 
@@ -212,7 +228,7 @@ function adminsChangeAdminAccount ($postData, $element = '') {
                                        SQL_QUERY_ESC("UPDATE
        `{?_MYSQL_PREFIX?}_admins`
 SET
-       `login`='%s'".$add.",
+       `login`='%s'" . $add . ",
        `email`='%s',
        `default_acl`='%s',
        `la_mode`='%s'
@@ -231,7 +247,7 @@ LIMIT 1",
                                        SQL_QUERY_ESC("UPDATE
        `{?_MYSQL_PREFIX?}_admins`
 SET
-       `login`='%s'".$add.",
+       `login`='%s'" . $add . ",
        `email`='%s',
        `la_mode`='%s'
 WHERE
@@ -246,10 +262,10 @@ LIMIT 1",
                                }
 
                                // Admin account saved
-                               $message = getMessage('ADMIN_ACCOUNT_SAVED');
+                               $message = '{--ADMIN_ACCOUNT_SAVED--}';
                        } else {
                                // Passwords did not match
-                               $message = getMessage('ADMINS_ERROR_PASS_MISMATCH');
+                               $message = '{--ADMIN_ADMINS_ERROR_PASS_MISMATCH--}';
                        }
                } else {
                        // Update whole array
@@ -258,18 +274,21 @@ LIMIT 1",
                                // Skip login/id entry
                                if (in_array($entry, array('login', 'id'))) continue;
 
-                               // Do we have a non-string (e.g. number, NOW() or back-tick at the beginning?
-                               if ((bigintval($value[$id], true, false) === $value[$id]) || ($value[$id] == 'NOW()') || (substr($value[$id], 0, 1) == '`'))  {
+                               // Do we have a non-string (e.g. number, NULL, NOW() or back-tick at the beginning?
+                               if (is_null($value[$id])) {
+                                       // NULL detected
+                                       $SQL .= '`' . $entry . '`=NULL, ';
+                               } elseif ((bigintval($value[$id], true, false) === $value[$id]) || ($value[$id] == 'NOW()') || (substr($value[$id], 0, 1) == '`'))  {
                                        // No need for ticks (')
-                                       $SQL .= '`' . $entry . '`=' . $value[$id] . ',';
+                                       $SQL .= '`' . $entry . '`=' . $value[$id] . ', ';
                                } else {
                                        // Strings need ticks (') around them
-                                       $SQL .= '`' . $entry . "`='" . SQL_ESCAPE($value[$id]) . "',";
+                                       $SQL .= '`' . $entry . "`='" . SQL_ESCAPE($value[$id]) . "', ";
                                }
                        } // END - foreach
 
-                       // Remove last tick and finish query
-                       $SQL = substr($SQL, 0, -1) . ' WHERE `id`=%s LIMIT 1';
+                       // Remove last 2 chars and finish query
+                       $SQL = substr($SQL, 0, -2) . ' WHERE `id`=%s LIMIT 1';
 
                        // Run it
                        SQL_QUERY_ESC($SQL, array(bigintval($id)), __FUNCTION__, __LINE__);
@@ -278,11 +297,11 @@ LIMIT 1",
 
        // Display message
        if (!empty($message)) {
-               loadTemplate('admin_settings_saved', false, $message);
+               displayMessage($message);
        } // END - if
 
        // Remove cache file
-       runFilterChain('post_admin_edited', postRequestArray());
+       runFilterChain('post_form_submited', postRequestArray());
 }
 
 // Make admin accounts editable
@@ -291,7 +310,7 @@ function adminsEditAdminAccount ($postData) {
        $currMode = getAdminDefaultAcl(getCurrentAdminId());
 
        // Begin the edit loop
-       $OUT = ''; $SW = 2;
+       $OUT = '';
        foreach ($postData['sel'] as $id => $selected) {
                // Secure id number
                $id = bigintval($id);
@@ -305,24 +324,22 @@ function adminsEditAdminAccount ($postData) {
                        SQL_FREERESULT($result);
 
                        // Prepare some more data for the template
-                       $content['sw'] = $SW;
                        $content['id'] = $id;
 
                        // Shall we allow changing default ACL?
                        if ($currMode == 'allow') {
                                // Allow chaning it
-                               $content['mode']    = generateOptionList('/ARRAY/', array('allow', 'deny'), array(getMessage('ADMINS_ALLOW_MODE'), getMessage('ADMINS_DENY_MODE')), $content['mode']);
+                               $content['mode']    = generateOptionList('/ARRAY/', array('allow', 'deny'), array('{--ADMIN_ADMINS_ACCESS_MODE_ALLOW--}', '{--ADMIN_ADMINS_ACCESS_MODE_DENY--}'), $content['mode']);
                        } else {
                                // Don't allow it
                                $content['mode'] = '&nbsp;';
                        }
-                       $content['la_mode'] = generateOptionList('/ARRAY/', array('global', 'OLD', 'NEW'), array(getMessage('ADMINS_GLOBAL_LA_SETTING'), getMessage('ADMINS_OLD_LA_SETTING'), getMessage('ADMINS_NEW_LA_SETTING')), $content['la_mode']);
+                       $content['la_mode'] = generateOptionList('/ARRAY/', array('global', 'OLD', 'NEW'), array('{--ADMIN_ADMINS_LA_MODE_GLOBAL--}', '{--ADMIN_ADMINS_LA_MODE_OLD--}', '{--ADMIN_ADMINS_LA_MODE_NEW--}'), $content['la_mode']);
 
                        // Load row template and switch color
                        $OUT .= loadTemplate('admin_edit_admins_row', true, $content);
-                       $SW = 3 - $SW;
-               }
-       }
+               } // END - if
+       } // END - foreach
 
        // Load template
        loadTemplate('admin_edit_admins', false, $OUT);
@@ -331,41 +348,40 @@ function adminsEditAdminAccount ($postData) {
 // Delete given admin accounts
 function adminsDeleteAdminAccount ($postData) {
        // Check if this account is the last one which cannot be deleted...
-       $result_main = SQL_QUERY("SELECT `id` FROM `{?_MYSQL_PREFIX?}_admins`", __FUNCTION__, __LINE__);
-       $accounts = SQL_NUMROWS($result_main);
-       SQL_FREERESULT($result_main);
-       if ($accounts > 1) {
+       if (countSumTotalData('', 'admins', 'id', '', true) > 1) {
                // Delete accounts
-               $OUT = ''; $SW = 2;
+               $OUT = '';
                foreach ($postData['sel'] as $id => $selected) {
                        // Secure id number
                        $id = bigintval($id);
 
                        // Get the admin's data
-                       $result = SQL_QUERY_ESC("SELECT login, email, default_acl AS mode, la_mode FROM `{?_MYSQL_PREFIX?}_admins` WHERE `id`=%s LIMIT 1",
+                       $result = SQL_QUERY_ESC("SELECT `login`, `email`, `default_acl` AS `mode`, `la_mode` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `id`=%s LIMIT 1",
                                array($id), __FUNCTION__, __LINE__);
+
+                       // Do we have an entry?
                        if (SQL_NUMROWS($result) == 1) {
-                               // Entry found
+                               // Entry found, so load data
                                $content = SQL_FETCHARRAY($result);
-                               SQL_FREERESULT($result);
-                               $content['mode'] = getMessage('ADMINS_'.strtoupper($content['mode']).'_MODE');
-                               $content['la_mode'] = getMessage('ADMINS_'.strtoupper($content['la_mode']).'_LA_SETTING');
+                               $content['mode']    = '{--ADMIN_ADMINS_ACCESS_MODE_' . strtoupper($content['mode'])    . '--}';
+                               $content['la_mode'] = '{--ADMIN_ADMINS_LA_MODE_' . strtoupper($content['la_mode']) . '--}';
 
                                // Prepare some more data
-                               $content['sw'] = $SW;
                                $content['id'] = $id;
 
                                // Load row template and switch color
-                               $OUT .= loadTemplate('admin_del_admins_row', true, $content);
-                               $SW = 3 - $SW;
-                       }
-               }
+                               $OUT .= loadTemplate('admin_delete_admins_row', true, $content);
+                       } // END - if
+
+                       // Free result
+                       SQL_FREERESULT($result);
+               } // END - foreach
 
                // Load template
-               loadTemplate('admin_del_admins', false, $OUT);
+               loadTemplate('admin_delete_admins', false, $OUT);
        } else {
                // Cannot delete last account!
-               loadTemplate('admin_settings_saved', false, getMessage('ADMIN_ADMINS_CANNOT_DELETE_LAST'));
+               displayMessage('{--ADMIN_ADMINS_CANNOT_DELETE_LAST--}');
        }
 }
 
@@ -380,7 +396,7 @@ function adminsRemoveAdminAccount ($postData) {
                // Delete only when it's not your own account!
                if (($del == 1) && (getCurrentAdminId() != $id)) {
                        // Rewrite his tasks to all admins
-                       SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_task_system` SET `assigned_admin`=0 WHERE `assigned_admin`=%s",
+                       SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_task_system` SET `assigned_admin`=NULL WHERE `assigned_admin`=%s",
                                array($id), __FUNCTION__, __LINE__);
 
                        // Remove account
@@ -390,27 +406,22 @@ function adminsRemoveAdminAccount ($postData) {
        }
 
        // Remove cache if cache system is activated
-       runFilterChain('post_admin_deleted', postRequestArray());
+       runFilterChain('post_form_deleted', postRequestArray());
 }
 
 // List all admin accounts
 function adminsListAdminAccounts() {
        // Select all admin accounts
-       $result = SQL_QUERY("SELECT `id`, `login`, `email`, `default_acl` AS mode, `la_mode` FROM `{?_MYSQL_PREFIX?}_admins` ORDER BY `login` ASC", __FUNCTION__, __LINE__);
-       $OUT = ''; $SW = 2;
+       $result = SQL_QUERY('SELECT `id`, `login`, `email`, `default_acl` AS mode, `la_mode` FROM `{?_MYSQL_PREFIX?}_admins` ORDER BY `login` ASC', __FUNCTION__, __LINE__);
+       $OUT = '';
        while ($content = SQL_FETCHARRAY($result)) {
                // Compile some variables
-               $content['mode'] = getMessage('ADMINS_'.strtoupper($content['mode']).'_MODE');
-               $content['la_mode'] = getMessage('ADMINS_'.strtoupper($content['la_mode']).'_LA_SETTING');
-
-               // Prepare some more data
-               $content['sw']         = $SW;
-               $content['email_link'] = generateEmailLink($content['id'], 'admins');
+               $content['mode']    = '{--ADMIN_ADMINS_ACCESS_MODE_' . strtoupper($content['mode'])    . '--}';
+               $content['la_mode'] = '{--ADMIN_ADMINS_LA_MODE_' . strtoupper($content['la_mode']) . '--}';
 
                // Load row template and switch color
                $OUT .= loadTemplate('admin_list_admins_row', true, $content);
-               $SW = 3 - $SW;
-       }
+       } // END - while
 
        // Free memory
        SQL_FREERESULT($result);
@@ -465,7 +476,7 @@ function sendAdminsEmails ($subj, $template, $content, $userid) {
                        }
                } elseif (($adminId == '0') || (empty($adminId))) {
                        // Select all email adresses
-                       $result = SQL_QUERY("SELECT `email` FROM `{?_MYSQL_PREFIX?}_admins` ORDER BY `id` ASC",
+                       $result = SQL_QUERY('SELECT `email` FROM `{?_MYSQL_PREFIX?}_admins` ORDER BY `id` ASC',
                                __FUNCTION__, __LINE__);
                } else {
                        // If Admin-Id is not "to-all" select
@@ -488,20 +499,20 @@ function getAminsExpertSettings () {
        // Default is has not the right
        $data['expert_settings'] = 'N';
 
-       // Get current admin login
-       $admin = getAdminLogin(getCurrentAdminId());
+       // Get current admin Id
+       $adminId = getCurrentAdminId();
 
        // Lookup settings in cache
-       if (isset($GLOBALS['cache_array']['admin']['expert_settings'][$admin])) {
+       if (isset($GLOBALS['cache_array']['admin']['expert_settings'][$adminId])) {
                // Use cache
-               $data['expert_settings'] = $GLOBALS['cache_array']['admin']['expert_settings'][$admin];
+               $data['expert_settings'] = $GLOBALS['cache_array']['admin']['expert_settings'][$adminId];
 
                // Update cache hits
                incrementStatsEntry('cache_hits');
        } elseif (!isExtensionInstalled('cache')) {
                // Load from database
-               $result = SQL_QUERY_ESC("SELECT `expert_settings` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `login`='%s' LIMIT 1",
-                       array($admin), __FUNCTION__, __LINE__);
+               $result = SQL_QUERY_ESC("SELECT `expert_settings` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `id`=%s LIMIT 1",
+                       array($adminId), __FUNCTION__, __LINE__);
 
                // Entry found?
                if (SQL_NUMROWS($result) == 1) {
@@ -509,7 +520,7 @@ function getAminsExpertSettings () {
                        $data = SQL_FETCHARRAY($result);
 
                        // Set cache
-                       $GLOBALS['cache_array']['admin']['expert_settings'][$admin] = $data['expert_settings'];
+                       $GLOBALS['cache_array']['admin']['expert_settings'][$adminId] = $data['expert_settings'];
                } // END - if
 
                // Free memory
@@ -525,20 +536,20 @@ function getAminsExpertWarning () {
        // Default is has not the right
        $data['expert_warning'] = 'N';
 
-       // Get current admin login
-       $admin = getAdminLogin(getCurrentAdminId());
+       // Get current admin id
+       $adminId = getCurrentAdminId();
 
        // Lookup warning in cache
-       if (isset($GLOBALS['cache_array']['admin']['expert_warning'][$admin])) {
+       if (isset($GLOBALS['cache_array']['admin']['expert_warning'][$adminId])) {
                // Use cache
-               $data['expert_warning'] = $GLOBALS['cache_array']['admin']['expert_warning'][$admin];
+               $data['expert_warning'] = $GLOBALS['cache_array']['admin']['expert_warning'][$adminId];
 
                // Update cache hits
                incrementStatsEntry('cache_hits');
        } elseif (!isExtensionInstalled('cache')) {
                // Load from database
-               $result = SQL_QUERY_ESC("SELECT `expert_warning` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `login`='%s' LIMIT 1",
-                       array($admin), __FUNCTION__, __LINE__);
+               $result = SQL_QUERY_ESC("SELECT `expert_warning` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `id`=%s LIMIT 1",
+                       array($adminId), __FUNCTION__, __LINE__);
 
                // Entry found?
                if (SQL_NUMROWS($result) == 1) {
@@ -546,7 +557,7 @@ function getAminsExpertWarning () {
                        $data = SQL_FETCHARRAY($result);
 
                        // Set cache
-                       $GLOBALS['cache_array']['admin']['expert_warning'][$admin] = $data['expert_warning'];
+                       $GLOBALS['cache_array']['admin']['expert_warning'][$adminId] = $data['expert_warning'];
                } // END - if
 
                // Free memory
@@ -558,26 +569,26 @@ function getAminsExpertWarning () {
 }
 
 // Get login_failures number from administrator's login name
-function getAdminLoginFailures ($adminLogin) {
+function getAdminLoginFailures ($adminId) {
        // Admin login should not be empty
-       if (empty($adminLogin)) {
-               debug_report_bug('adminLogin is empty.');
+       if (empty($adminId)) {
+               debug_report_bug(__FUNCTION__, __LINE__, 'adminId is empty.');
        } // END - if
 
        // By default no admin is found
-       $data['login_failures'] = '-1';
+       $data['login_failures'] = -1;
 
        // Check cache
-       if (isset($GLOBALS['cache_array']['admin']['login_failures'][$adminLogin])) {
+       if (isset($GLOBALS['cache_array']['admin']['login_failures'][$adminId])) {
                // Use it if found to save SQL queries
-               $data['login_failures'] = $GLOBALS['cache_array']['admin']['login_failures'][$adminLogin];
+               $data['login_failures'] = $GLOBALS['cache_array']['admin']['login_failures'][$adminId];
 
                // Update cache hits
                incrementStatsEntry('cache_hits');
        } elseif (!isExtensionActive('cache')) {
                // Load from database
-               $result = SQL_QUERY_ESC("SELECT `login_failures` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `login`='%s' LIMIT 1",
-                       array($adminLogin), __FUNCTION__, __LINE__);
+               $result = SQL_QUERY_ESC("SELECT `login_failures` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `id`=%s LIMIT 1",
+                       array($adminId), __FUNCTION__, __LINE__);
 
                // Do we have an entry?
                if (SQL_NUMROWS($result) == 1) {
@@ -594,26 +605,26 @@ function getAdminLoginFailures ($adminLogin) {
 }
 
 // Get last_failure number from administrator's login name
-function getAdminLastFailure ($adminLogin) {
+function getAdminLastFailure ($adminId) {
        // Admin login should not be empty
-       if (empty($adminLogin)) {
-               debug_report_bug('adminLogin is empty.');
+       if (empty($adminId)) {
+               debug_report_bug(__FUNCTION__, __LINE__, 'adminId is empty.');
        } // END - if
 
        // By default no admin is found
-       $data['last_failure'] = '-1';
+       $data['last_failure'] = -1;
 
        // Check cache
-       if (isset($GLOBALS['cache_array']['admin']['last_failure'][$adminLogin])) {
+       if (isset($GLOBALS['cache_array']['admin']['last_failure'][$adminId])) {
                // Use it if found to save SQL queries
-               $data['last_failure'] = $GLOBALS['cache_array']['admin']['last_failure'][$adminLogin];
+               $data['last_failure'] = $GLOBALS['cache_array']['admin']['last_failure'][$adminId];
 
                // Update cache hits
                incrementStatsEntry('cache_hits');
        } elseif (!isExtensionActive('cache')) {
                // Load from database
-               $result = SQL_QUERY_ESC("SELECT UNIX_TIMESTAMP(`last_failure`) AS `last_failure` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `login`='%s' LIMIT 1",
-                       array($adminLogin), __FUNCTION__, __LINE__);
+               $result = SQL_QUERY_ESC("SELECT UNIX_TIMESTAMP(`last_failure`) AS `last_failure` FROM `{?_MYSQL_PREFIX?}_admins` WHERE `id`=%s LIMIT 1",
+                       array($adminId), __FUNCTION__, __LINE__);
 
                // Do we have an entry?
                if (SQL_NUMROWS($result) == 1) {
@@ -629,81 +640,13 @@ function getAdminLastFailure ($adminLogin) {
        return $data['last_failure'];
 }
 
-//*****************************************************************************
-//                     Below only filter functions
-//*****************************************************************************
-
-// Filter for adding extra data to the query
-function FILTER_ADD_EXTRA_SQL_DATA ($add = '') {
-       // Is the admins extension updated? (should be!)
-       if (isExtensionInstalledAndNewer('admins', '0.3.0')) $add .= ', `default_acl` AS def_acl';
-       if (isExtensionInstalledAndNewer('admins', '0.6.7')) $add .= ', `la_mode`';
-       if (isExtensionInstalledAndNewer('admins', '0.7.2')) $add .= ', `login_failures`, UNIX_TIMESTAMP(`last_failure`) AS last_failure';
-       if (isExtensionInstalledAndNewer('admins', '0.7.3')) $add .= ', `expert_settings`, `expert_warning`';
-
-       // Return it
-       return $add;
-}
-
-// Reset the login failures
-function FILTER_RESET_ADMINS_LOGIN_FAILURES ($data) {
-       // Store it in session
-       setSession('mailer_admin_failures'    , getAdminLoginFailures($data['login']));
-       setSession('mailer_admin_last_failure', getAdminLastFailure($data['login']));
-
-       // Prepare update data
-       $postData['login'][getCurrentAdminId()]          = $data['login'];
-       $postData['login_failures'][getCurrentAdminId()] = '0';
-       $postData['last_failure'][getCurrentAdminId()]   = '0000-00-00 00:00:00';
-
-       // Change it in the admin
-       adminsChangeAdminAccount($postData);
-
-       // Always make sure the cache is destroyed
-       rebuildCache('admin');
-
-       // Return the data for further processing
-       return $data;
-}
-
-// Count the login failure
-function FILTER_COUNT_ADMINS_LOGIN_FAILURE ($data) {
-       // Prepare update data
-       $postData['login'][getCurrentAdminId()]          = $data['login'];
-       $postData['login_failures'][getCurrentAdminId()] = '`login_failures`+1';
-       $postData['last_failure'][getCurrentAdminId()]   = 'NOW()';
-
-       // Change it in the admin
-       adminsChangeAdminAccount($postData);
-
-       // Always make sure the cache is destroyed
-       rebuildCache('admin');
-
-       // Return the data for further processing
-       return $data;
-}
-
-// Rehashes the given plain admin password and stores it the database
-function FILTER_REHASH_ADMINS_PASSWORD ($data) {
-       // Generate new hash
-       $newHash = generateHash($data['plain_pass']);
-
-       // Prepare update data
-       $postData['login'][getCurrentAdminId()]    = $data['login'];
-       $postData['password'][getCurrentAdminId()] = $newHash;
-
-       // Change it in the admin
-       adminsChangeAdminAccount($postData);
-
-       // Update cookie/session and data array
-       setSession('admin_md5', encodeHashForCookie($newHash));
-       $data['pass_hash'] = $newHash;
-
-       // Always make sure the cache is destroyed
-       rebuildCache('admin');
+// ---------------------------------------------------------------------------
+//                             Wrapper functions
+// ---------------------------------------------------------------------------
 
-       // Return the data for further processing
-       return $data;
+// Wrapper function to check wether expert setting warning is enabled
+function isAdminsExpertWarningEnabled () {
+       return (getAminsExpertWarning() == 'Y');
 }
 
 // [EOF]