-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
dc06459
commit 1955a79
Showing
9 changed files
with
121 additions
and
98 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
.cms-menu__header .cms-userswitcher span { | ||
color: #43536d; | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
en: | ||
SanderVanScheepen\SilverstripeCMSUserSwitcher\Extension\CMSUserSwitcherMemberExt: | ||
HEADER_MAIN: 'Switching identities' | ||
INTRODUCTION: 'This feature allows administrators after logging in to the CMS to assume the identity of another user.' | ||
OPTION_ENABLE_FOR_ADMIN: 'Enable this administrator account to log in as other users.' | ||
OPTION_ADD_MEMBER_TO_USERSWITCHER: 'Show this user in the list of accounts that administrators can assume the identity of' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
nl: | ||
SanderVanScheepen\SilverstripeCMSUserSwitcher\Extension\CMSUserSwitcherMemberExt: | ||
HEADER_MAIN: 'In kunnen loggen als andere gebruiker' | ||
INTRODUCTION: 'Hiermee kunnen beheerders in het CMS de identiteit van een andere gebruiker aannemen.' | ||
OPTION_ENABLE_FOR_ADMIN: 'Activeer inloggen als andere gebruiker voor dit administratoraccount' | ||
OPTION_ADD_MEMBER_TO_USERSWITCHER: 'Toon deze gebruiker in de lijst van accounts waarvan administrators de identiteit van kunnen aannemen' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,106 +1,102 @@ | ||
<?php | ||
|
||
namespace SanderVanScheepen\SilverstripeCMSUserSwitcher\Extension; | ||
|
||
use SanderVanScheepen\SilverstripeCMSUserSwitcher\Controller\Admin\UserSwitcherController; | ||
use SilverStripe\ORM\ArrayList; | ||
use SilverStripe\ORM\DataExtension; | ||
use SilverStripe\Security\Member; | ||
use SilverStripe\Security\Security; | ||
use SilverStripe\View\ArrayData; | ||
use SilverStripe\View\Requirements; | ||
use SilverStripe\Admin\LeftAndMain; | ||
use SilverStripe\Control\Controller; | ||
use SilverStripe\Core\Injector\Injector; | ||
use SilverStripe\Security\Group; | ||
use SilverStripe\Security\Permission; | ||
use function in_array; | ||
use function intval; | ||
use function serialize; | ||
|
||
class UserSwitcherDropdownLeftAndMainExt extends DataExtension | ||
{ | ||
|
||
public function init() | ||
{ | ||
Requirements::javascript('sandervanscheepen/silverstripe-cms-userswitcher:client/dist/js/LeftAndMain_UserSwitcher.js'); | ||
} | ||
|
||
public function SwitchableMembers() | ||
{ | ||
$output = ArrayList::create(); | ||
Requirements::javascript('sandervanscheepen/silverstripe-cms-userswitcher:client/dist/js/LeftAndMain_UserSwitcher.js'); | ||
|
||
$dlMembers = UserSwitcherDropdownLeftAndMainExt::getSwitchableMembers(); | ||
|
||
/** @var Member $oCurrentMember */ | ||
$oCurrentMember = Security::getCurrentUser(); | ||
|
||
/** @var Member $oMember */ | ||
foreach ($dlMembers as $oMember) { | ||
$sCurrentState = intval($oMember->ID) === intval($oCurrentMember->ID) ? 'selected' : ''; | ||
|
||
$sLabel = 'Member ' . $oMember->ID; | ||
$sName = $oMember->getName(); | ||
|
||
if($sName && trim($sName) !== "") { | ||
$sLabel = $sName; | ||
} | ||
|
||
$output->push(ArrayData::create([ | ||
'CurrentState' => $sCurrentState, | ||
'ID' => $oMember->ID, | ||
'Title' => $sLabel, | ||
'MemberID' => $oMember->ID | ||
])); | ||
} | ||
|
||
return $output; | ||
} | ||
|
||
protected static $oMemoizedCanUserSwitch = null; | ||
|
||
public function canUserSwitch() | ||
{ | ||
if (static::$oMemoizedCanUserSwitch === null) { | ||
/** @var Member $oCurrentMember */ | ||
$oCurrentMember = Security::getCurrentUser(); | ||
|
||
$oSession = Controller::curr()->getRequest()->getSession(); | ||
|
||
static::$oMemoizedCanUserSwitch = ( | ||
$oSession->get('CMSUserSwitched') | ||
|| (Permission::check('ADMIN') && in_array($oCurrentMember->CMSUserSwitchCanSwitch, [true, 1, '1']) && static::getSwitchableMembers()->count() > 0) | ||
); | ||
namespace SanderVanScheepen\SilverstripeCMSUserSwitcher\Extension; | ||
|
||
use SilverStripe\Control\Controller; | ||
use SilverStripe\ORM\ArrayList; | ||
use SilverStripe\ORM\DataExtension; | ||
use SilverStripe\Security\Member; | ||
use SilverStripe\Security\Permission; | ||
use SilverStripe\Security\Security; | ||
use SilverStripe\View\ArrayData; | ||
use SilverStripe\View\Requirements; | ||
use function in_array; | ||
use function intval; | ||
|
||
class UserSwitcherDropdownLeftAndMainExt extends DataExtension | ||
{ | ||
|
||
public function init() | ||
{ | ||
Requirements::javascript('sandervanscheepen/silverstripe-cms-userswitcher:client/dist/js/LeftAndMain_UserSwitcher.js'); | ||
Requirements::css('sandervanscheepen/silverstripe-cms-userswitcher:client/dist/css/LeftAndMain_UserSwitcher.css'); | ||
} | ||
|
||
public function SwitchableMembers() | ||
{ | ||
$output = ArrayList::create(); | ||
Requirements::javascript('sandervanscheepen/silverstripe-cms-userswitcher:client/dist/js/LeftAndMain_UserSwitcher.js'); | ||
|
||
$dlMembers = UserSwitcherDropdownLeftAndMainExt::getSwitchableMembers(); | ||
|
||
/** @var Member $oCurrentMember */ | ||
$oCurrentMember = Security::getCurrentUser(); | ||
|
||
/** @var Member $oMember */ | ||
foreach ($dlMembers as $oMember) { | ||
$sCurrentState = intval($oMember->ID) === intval($oCurrentMember->ID) ? 'selected' : ''; | ||
|
||
$sLabel = 'Member ' . $oMember->ID; | ||
$sName = $oMember->getName(); | ||
|
||
if ($sName && trim($sName) !== "") { | ||
$sLabel = $sName; | ||
} | ||
|
||
return static::$oMemoizedCanUserSwitch; | ||
$output->push(ArrayData::create([ | ||
'CurrentState' => $sCurrentState, | ||
'ID' => $oMember->ID, | ||
'Title' => $sLabel, | ||
'MemberID' => $oMember->ID | ||
])); | ||
} | ||
|
||
return $output; | ||
} | ||
|
||
protected static $oMemoizedCanUserSwitch = null; | ||
|
||
public function canUserSwitch() | ||
{ | ||
if (static::$oMemoizedCanUserSwitch === null) { | ||
/** @var Member $oCurrentMember */ | ||
$oCurrentMember = Security::getCurrentUser(); | ||
|
||
$oSession = Controller::curr()->getRequest()->getSession(); | ||
|
||
static::$oMemoizedCanUserSwitch = ( | ||
$oSession->get('CMSUserSwitched') | ||
|| (Permission::check('ADMIN') && in_array($oCurrentMember->CMSUserSwitchCanSwitch, [true, 1, '1']) && static::getSwitchableMembers()->count() > 0) | ||
); | ||
} | ||
|
||
protected static $oMemoizedSwitchableMembers = null; | ||
return static::$oMemoizedCanUserSwitch; | ||
} | ||
|
||
public static function getSwitchableMembers() | ||
{ | ||
if (static::$oMemoizedSwitchableMembers === null) { | ||
/** @var Member $oCurrentMember */ | ||
$oCurrentMember = Security::getCurrentUser(); | ||
$iCurrentMemberID = intval($oCurrentMember->ID); | ||
protected static $oMemoizedSwitchableMembers = null; | ||
|
||
$dlMembersThatCanBeImpersonated = Member::get()->filter([ | ||
'CMSUserSwitchCanBeImpersonatedByAdmin' => true | ||
]); | ||
public static function getSwitchableMembers() | ||
{ | ||
if (static::$oMemoizedSwitchableMembers === null) { | ||
/** @var Member $oCurrentMember */ | ||
$oCurrentMember = Security::getCurrentUser(); | ||
$iCurrentMemberID = intval($oCurrentMember->ID); | ||
|
||
$aMemberIDs = $dlMembersThatCanBeImpersonated->column('ID'); | ||
$dlMembersThatCanBeImpersonated = Member::get()->filter([ | ||
'CMSUserSwitchCanBeImpersonatedByAdmin' => true | ||
]); | ||
|
||
if (in_array($iCurrentMemberID, $aMemberIDs) !== true) { | ||
$aMemberIDs[] = $iCurrentMemberID; | ||
} | ||
$aMemberIDs = $dlMembersThatCanBeImpersonated->column('ID'); | ||
|
||
static::$oMemoizedSwitchableMembers = Member::get()->filter([ | ||
'ID' => $aMemberIDs | ||
])->sort('FirstName ASC, Surname ASC'); | ||
if (in_array($iCurrentMemberID, $aMemberIDs) !== true) { | ||
$aMemberIDs[] = $iCurrentMemberID; | ||
} | ||
|
||
return static::$oMemoizedSwitchableMembers; | ||
static::$oMemoizedSwitchableMembers = Member::get()->filter([ | ||
'ID' => $aMemberIDs | ||
])->sort('FirstName ASC, Surname ASC'); | ||
} | ||
|
||
return static::$oMemoizedSwitchableMembers; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters