flush('PRIVILEGES', true); $message = __('The command executed successfully'); } else $message = __('Error occurred while executing the query'); } displayUserForm($db, $editor, $message, $action); } function displayUserForm(&$db, &$editor, $message, $action) { $dbList = $db->getDatabases(); $userList = $editor->getUsersList(); $privilegeNames = Privileges::getNames(); $dbPrivilegeNames = DbPrivileges::getNames(); // current user name is not plaintext in case of 'update' action $userName = ''; if ($action == 'update') { $obj = json_decode(v($_REQUEST['query'])); if (is_object($obj)) $userName = $obj->username . '@' . $obj->hostname; } else $userName = v($_REQUEST['query']); $currentUser = selectUser($userList, $userName); $privileges = array(); $dbPrivileges = array(); $userInfo = array(); if ($currentUser) { $privileges = $currentUser->getGlobalPrivileges(); foreach($dbList as $db_name) $dbPrivileges[$db_name] = $currentUser->getDbPrivileges($db_name); $userInfo = array('username' => $currentUser->userName, 'host' => $currentUser->host); } $users = userOptions($userList, $currentUser); $replace = array( 'ID' => v($_REQUEST["id"]) ? htmlspecialchars($_REQUEST["id"]) : '', 'MESSAGE' => $message, 'USERS' => $users, 'USER_INFO' => json_encode($userInfo), 'DATABASES' => json_encode($dbList), 'PRIVILEGES' => json_encode($privileges), 'DB_PRIVILEGES' => json_encode($dbPrivileges), 'PRIVILEGE_NAMES' => json_encode($privilegeNames), 'DB_PRIVILEGE_NAMES' => json_encode($dbPrivilegeNames) ); echo view('usermanager', $replace); } function selectUser($list, $user) { foreach($list as $obj) { $name = $obj->userName . '@' . $obj->host; if ($user == $name) return $obj; } $obj = count($list) > 0 ? $list[0] : NULL; return $obj; } function addUser(&$db, $info, &$editor) { $info = json_decode($info); if (!is_object($info)) return false; return $editor->add($info->username, $info->hostname, $info->pwd); } function deleteUser(&$db, $info, &$editor) { $info = json_decode($info); if (!is_object($info)) return false; return $editor->delete($info->username, $info->host); } function updateUser(&$db, $info, &$editor) { $info = json_decode($info); if (!is_object($info)) return false; // only change user info if it requires update if ($info->oldusername != $info->username || $info->oldhostname != $info->hostname) { $result = $editor->update($info->oldusername, $info->oldhostname, $info->username, $info->hostname); if (!$result) return false; } // change password only if requested if (isset($info->password) && $info->password != '') { $result = $editor->updatePassword($info->username, $info->hostname, $info->password); if (!$result) return false; } else if (isset($info->removepass) && $info->removepass == '1') { $result = $editor->updatePassword($info->username, $info->hostname, ''); if (!$result) return false; } $user = $editor->getUser($info->username, $info->hostname); $user->setGlobalPrivileges($info->privileges); $dbList = $db->getDatabases(); foreach($dbList as $db_name) { $result = $user->setDbPrivileges($db_name, isset($info->db_privileges->$db_name) ? $info->db_privileges->$db_name : array() ); if (!$result) return false; } return true; } function userOptions($array, $selected) { $str = $selected == '' ? '' : ''; foreach($array as $user) { $name = $user->userName . '@' . $user->host; if ($selected->userName == $user->userName && $selected->host == $user->host) $str .= ''; else $str .= ''; } return $str; } ?>