]> git.mxchange.org Git - mailer.git/blobdiff - inc/libs/admins_functions.php
Rewrites to use fake POST data
[mailer.git] / inc / libs / admins_functions.php
index 9739305777b21a352542a83ef24cf3e966d20b73..e81d6a13894c10fa0445d82050399f8149f69ce9 100644 (file)
@@ -41,18 +41,20 @@ if (!defined('__SECURITY')) {
 }
 
 // Check ACL for menu combination
-function adminsCheckAdminAcl ($action, $what) {
-       // If action is login or logout allow allways!
-       $default = 'allow';
+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;
-       } // END - if
+       } elseif (isset($GLOBALS[__FUNCTION__][$adminId][$action][$what])) {
+               // If we have cache, use it
+               return $GLOBALS[__FUNCTION__][$adminId][$action][$what];
+       }
 
-       // Default is deny
-       $ret = false;
-
-       // Get admin's id
-       $adminId = getCurrentAdminId();
+       // But default result is failed
+       $GLOBALS[__FUNCTION__][$action][$what] = false;
 
        // Get admin's defult access right
        $default = getAdminDefaultAcl($adminId);
@@ -63,7 +65,7 @@ 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;
@@ -81,7 +83,7 @@ function adminsCheckAdminAcl ($action, $what) {
                        $aclMode = $GLOBALS['cache_array']['admin_acls']['access_mode'][$adminId][$key];
 
                        // Log debug message
-                       logDebugMessage(__FUNCTION__, __LINE__, 'action=' . $action . ',key=' . $key . ',acl_mode=' . $aclMode);
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'action=' . $action . ',key=' . $key . ',acl_mode=' . $aclMode);
 
                        // Count cache hits
                        incrementStatsEntry('cache_hits');
@@ -93,13 +95,13 @@ function adminsCheckAdminAcl ($action, $what) {
                        $aclMode = $GLOBALS['cache_array']['admin_acls']['access_mode'][$adminId][$key];
 
                        // Log debug message
-                       logDebugMessage(__FUNCTION__, __LINE__, 'what=' . $what . ',key=' . $key . ',acl_mode=' . $aclMode);
+                       //* 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
@@ -123,14 +125,14 @@ function adminsCheckAdminAcl ($action, $what) {
 
        // Check ACL and (maybe) allow
        //* DEBUG: */ debugOutput('default='.$default.',acl_mode='.$aclMode.',parent='.intval($parent));
-       if ((($default == 'allow') && ($aclMode != 'deny')) || (($default == 'deny') && ($aclMode == 'allow')) || ($parent === true) || (($default == '***') && ($aclMode == 'failed') && ($parent === false))) {
+       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: */ debugOutput(__FUNCTION__.'['.__LINE__.']:act='.$action.',wht='.$what.',default='.$default.',aclMode='.$aclMode);
-       return $ret;
+       return $GLOBALS[__FUNCTION__][$adminId][$action][$what];
 }
 
 // Create email link to admins's account
@@ -167,12 +169,15 @@ LIMIT 1",
 }
 
 // Change a lot admin account
-function adminsChangeAdminAccount ($postData, $element = '') {
+function adminsChangeAdminAccount ($postData, $element = '', $displayMessage = true) {
        // Begin the update
        $cache_update = '0';
+       $message = '';
+
        foreach ($postData['login'] as $id => $login) {
                // Secure id number
                $id = bigintval($id);
+               /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'id=' . $id . ',login=' . $login);
 
                // When both passwords match update admin account
                if ((!empty($element)) && (isset($postData[$element]))) {
@@ -182,7 +187,7 @@ function adminsChangeAdminAccount ($postData, $element = '') {
 
                        // Admin account saved
                        $message = '{--ADMIN_ACCOUNT_SAVED--}';
-               } elseif ((isset($postData['pass1'])) && (isset($postData['pass2']))) {
+               } elseif ((!empty($postData['pass1'])) && (!empty($postData['pass2']))) {
                        // Update only if both passwords match
                        if (($postData['pass1'][$id] == $postData['pass2'][$id])) {
                                // Save only when both passwords are the same (also when they are empty)
@@ -192,7 +197,9 @@ function adminsChangeAdminAccount ($postData, $element = '') {
                                $hash = generateHash($postData['pass1'][$id]);
 
                                // Save password when set
-                               if (!empty($postData['pass1'][$id])) $add = sprintf(", `password`='%s'", SQL_ESCAPE($hash));
+                               if (!empty($postData['pass1'][$id])) {
+                                       $add = sprintf(", `password`='%s'", SQL_ESCAPE($hash));
+                               } // END - if
 
                                // Get admin's id
                                $adminId = getCurrentAdminId();
@@ -270,7 +277,9 @@ LIMIT 1",
                        $SQL = 'UPDATE `{?_MYSQL_PREFIX?}_admins` SET ';
                        foreach ($postData as $entry => $value) {
                                // Skip login/id entry
-                               if (in_array($entry, array('login', 'id'))) continue;
+                               if (in_array($entry, array('login', 'id'))) {
+                                       continue;
+                               } // END - if
 
                                // Do we have a non-string (e.g. number, NULL, NOW() or back-tick at the beginning?
                                if (is_null($value[$id])) {
@@ -290,16 +299,30 @@ LIMIT 1",
 
                        // Run it
                        SQL_QUERY_ESC($SQL, array(bigintval($id)), __FUNCTION__, __LINE__);
+
+                       // Was it updated?
+                       if (SQL_AFFECTEDROWS() == 1) {
+                               // Admin account saved
+                               $message = '{--ADMIN_ACCOUNT_SAVED--}';
+                       } else {
+                               // Passwords did not match
+                               $message = '{--ADMIN_ADMINS_ERROR_PASS_MISMATCH--}';
+                       }
                }
        } // END - foreach
 
        // Display message
        if (!empty($message)) {
-               displayMessage($message);
+               if ($displayMessage === true) {
+                       displayMessage($message);
+               } // END - if
        } // END - if
 
        // Remove cache file
        runFilterChain('post_form_submited', postRequestArray());
+
+       // Return message
+       return $message;
 }
 
 // Make admin accounts editable
@@ -440,6 +463,8 @@ function sendAdminsEmails ($subj, $template, $content, $userid) {
        // Check which admin shall receive this mail
        $result = SQL_QUERY_ESC("SELECT `admin_id` FROM `{?_MYSQL_PREFIX?}_admins_mails` WHERE `mail_template`='%s' ORDER BY `admin_id` ASC",
                array($template), __FUNCTION__, __LINE__);
+
+       // No entries found?
        if (SQL_HASZERONUMS($result)) {
                // Create new entry (to all admins)
                SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_admins_mails` (`admin_id`, `mail_template`) VALUES (0, '%s')",
@@ -638,9 +663,9 @@ function getAdminLastFailure ($adminId) {
        return $data['last_failure'];
 }
 
-// ---------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
 //                             Wrapper functions
-// ---------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
 
 // Wrapper function to check wether expert setting warning is enabled
 function isAdminsExpertWarningEnabled () {