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;