From f275084f6c63a72a89ccf140f5a73051fef568d8 Mon Sep 17 00:00:00 2001 From: camer0n Date: Wed, 14 May 2025 05:53:30 -0700 Subject: [PATCH] Issue #5476 Copy/Paste user permissions option added. --- e107_admin/users.php | 68 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/e107_admin/users.php b/e107_admin/users.php index bcf4511be..01211ec55 100644 --- a/e107_admin/users.php +++ b/e107_admin/users.php @@ -189,6 +189,20 @@ JS; ->setMode('main') ->setAction('emulate'); break; + + case 'copyperms': + $this->getRequest() + ->setQuery(array()) + ->setMode('main') + ->setAction('copyperms'); + break; + + case 'pasteperms': + $this->getRequest() + ->setQuery(array()) + ->setMode('main') + ->setAction('pasteperms'); + break; // redirect to AdminObserver/AdminPage() case 'admin': @@ -891,6 +905,50 @@ class users_admin_ui extends e_admin_ui $this->redirect('list', 'main', true); } + + public function copypermsPage() + { + if(getperms('0') && !empty($_POST['userid'])) + { + $uid = (int) $_POST['userid']; + e107::getSession()->set('copyperms',$uid); + $user = e107::user($uid); + e107::getMessage()->addSuccess("Copied permissions of ".$user['user_name']." to clipboard.", 'default', true);; + } + + $this->redirect('list', 'main', false); + + } + + public function pastepermsPage() + { + $originUser = (int) e107::getSession()->get('copyperms', true); + + if(getperms('0') && !empty($_POST['userid']) && $originUser) + { + if(!$user = e107::getDb()->retrieve('user', 'user_name, user_admin, user_class, user_perms', 'user_id='.$originUser)) + { + e107::getMessage()->addError("Failed to retrieve user permissions.", 'default', true); + return; + } + + $destUser = (int) $_POST['userid']; + + $sysuser = e107::getSystemUser($destUser, false); + + $result = $sysuser->set('user_perms', $user['user_perms']) + ->set('user_class', $user['user_class']) + ->save(); + + $name = $sysuser->getName(); + + e107::getMessage()->addSuccess("Copied permissions from ".$user['user_name']." to $name.", 'default', true);; + } + + $this->redirect('list', 'main', false); + + } + /** * Remove admin status trigger @@ -2820,6 +2878,16 @@ class users_admin_form_ui extends e_admin_form_ui if(getperms('0')) { $opts['emulate'] = 'Emulate permissions'; + + if(e107::getSession()->get('copyperms')) + { + $opts['pasteperms'] = 'Paste permissions'; + } + else + { + $opts['copyperms'] = 'Copy permissions'; + } + } $opts['adminperms'] = USRLAN_221;