Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,8 @@ jobs:
strategy:
matrix:
php-version:
- 7.4
- 8.0
- 8.1
- 8.2
- 8.3
steps:
- name: Checkout
uses: actions/checkout@v2
Expand Down
94 changes: 78 additions & 16 deletions Classes/Controller/BackendUserToolsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,16 @@
namespace Visol\Beusertools\Controller;

use Psr\Http\Message\ResponseInterface;
use TYPO3\CMS\Backend\Attribute\AsController;
use TYPO3\CMS\Backend\Template\Components\ButtonBar;
use TYPO3\CMS\Backend\Template\Components\Buttons\DropDown\DropDownItem;
use TYPO3\CMS\Backend\Template\ModuleTemplate;
use TYPO3\CMS\Backend\Template\ModuleTemplateFactory;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\View\ViewFactoryData;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
use TYPO3\CMS\Fluid\View\FluidViewFactory;
use Visol\Beusertools\Domain\Repository\BackendUserGroupRepository;
use Visol\Beusertools\Domain\Repository\BackendUserRepository;

Expand Down Expand Up @@ -32,21 +41,29 @@
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/

#[AsController]
class BackendUserToolsController extends ActionController
{
/**
* @var BackendUserGroupRepository
*/
protected $backendUserGroupRepository;
private ModuleTemplate $moduleTemplate;

/**
* @var BackendUserRepository
*/
protected $backendUserRepository;
protected BackendUserGroupRepository $backendUserGroupRepository;

public function listUsersByGroupAction(): ResponseInterface
protected BackendUserRepository $backendUserRepository;

public function __construct(
protected readonly FluidViewFactory $fluidViewFactory,
protected readonly ModuleTemplateFactory $moduleTemplateFactory
) {
}

public function initializeAction(): void
{
$this->moduleTemplate = $this->moduleTemplateFactory->create($this->request);
$this->setDocHeader();
}

public function listUsersByGroupAction(): ResponseInterface
{
$backendUserGroups = $this->backendUserGroupRepository->findAll()->toArray();
$backendUserGroupsWithUsers = [];
$i = 0;
Expand All @@ -56,12 +73,17 @@ public function listUsersByGroupAction(): ResponseInterface
$backendUserGroupsWithUsers[$backendUserGroup->getUid()]['users'] = $this->backendUserRepository->findByUsergroups([$backendUserGroup->getUid()]);
$i++;
}
$this->view->assign('backendUserGroups', $backendUserGroupsWithUsers);
return $this->htmlResponse();
$this->moduleTemplate->assign('backendUserGroups', $backendUserGroupsWithUsers);
return $this->moduleTemplate->renderResponse('BackendUserTools/ListUsersByGroup');
}

public function exportUsersByGroupAction()
public function exportUsersByGroupAction(): void
{
$viewData = new ViewFactoryData(
templatePathAndFilename: 'EXT:beusertools/Resources/Private/Templates/Default/BackendUserTools/ExportUsersByGroup.html',
format: 'xml',
);
$view = $this->fluidViewFactory->create($viewData);

$backendUserGroups = $this->backendUserGroupRepository->findAll()->toArray();
$backendUserGroupsWithUsers = [];
Expand All @@ -72,8 +94,9 @@ public function exportUsersByGroupAction()
$backendUserGroupsWithUsers[$backendUserGroup->getUid()]['users'] = $this->backendUserRepository->findByUsergroups([$backendUserGroup->getUid()]);
$i++;
}
$this->view->assign('backendUserGroups', $backendUserGroupsWithUsers);
$content = $this->view->render();

$view->assign('backendUserGroups', $backendUserGroupsWithUsers);
$content = $view->render();

header('Content-Description: File Transfer');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
Expand All @@ -90,8 +113,8 @@ public function exportUsersByGroupAction()
public function listUsersAction(): ResponseInterface
{
$backendUsers = $this->backendUserRepository->findAll();
$this->view->assign('backendUsers', $backendUsers);
return $this->htmlResponse();
$this->moduleTemplate->assign('backendUsers', $backendUsers);
return $this->moduleTemplate->renderResponse('BackendUserTools/ListUsers');
}

public function injectBackendUserGroupRepository(BackendUserGroupRepository $backendUserGroupRepository): void
Expand All @@ -103,4 +126,43 @@ public function injectBackendUserRepository(BackendUserRepository $backendUserRe
{
$this->backendUserRepository = $backendUserRepository;
}

public function setDocHeader(): void
{
$buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar();
$dropdownLabel = LocalizationUtility::translate(
'LLL:EXT:beusertools/Resources/Private/Language/locallang.xlf:submoduleDropdownLabel'
);
$dropDownButton = $buttonBar->makeDropDownButton()->setLabel($dropdownLabel)->setTitle(
$dropdownLabel
)->setShowLabelText($dropdownLabel);

$dropDownButton->addItem(
GeneralUtility::makeInstance(DropDownItem::class)
->setLabel(LocalizationUtility::translate('LLL:EXT:beusertools/Resources/Private/Language/locallang.xlf:submoduleTitle_listUsersByGroupAction'))
->setHref(
$this->uriBuilder->setArguments(
[
'controller' => 'BackendUserTools',
'action' => 'listUsersByGroup',
]
)->buildBackendUri()
)
);

$dropDownButton->addItem(
GeneralUtility::makeInstance(DropDownItem::class)
->setLabel(LocalizationUtility::translate('LLL:EXT:beusertools/Resources/Private/Language/locallang.xlf:submoduleTitle_listUsersAction'))
->setHref(
$this->uriBuilder->setArguments(
[
'controller' => 'BackendUserTools',
'action' => 'listUsers',
]
)->buildBackendUri()
)
);

$buttonBar->addButton($dropDownButton, ButtonBar::BUTTON_POSITION_LEFT, 2);
}
}
20 changes: 10 additions & 10 deletions Classes/Domain/Model/BackendUser.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ class BackendUser extends AbstractEntity
// below are the "default" properties stolen from the extbase model
/**
* @var string
* @TYPO3\CMS\Extbase\Annotation\Validate("NotEmpty")
*/
#[TYPO3\CMS\Extbase\Annotation\Validate(['validator' => 'NotEmpty'])]
protected $userName = '';

/**
Expand Down Expand Up @@ -89,7 +89,7 @@ public function getUserName()
*
* @param string $userName the user name to set, must not be empty
*/
public function setUserName($userName)
public function setUserName($userName): void
{
$this->userName = $userName;
}
Expand All @@ -105,7 +105,7 @@ public function getDescription()
/**
* @param string $description
*/
public function setDescription($description)
public function setDescription($description): void
{
$this->description = $description;
}
Expand All @@ -125,7 +125,7 @@ public function getIsAdministrator()
*
* @param bool $isAdministrator whether this user should be an administrator
*/
public function setIsAdministrator($isAdministrator)
public function setIsAdministrator($isAdministrator): void
{
$this->isAdministrator = $isAdministrator;
}
Expand All @@ -145,7 +145,7 @@ public function getIsDisabled()
*
* @param bool $isDisabled whether this user is disabled
*/
public function setIsDisabled($isDisabled)
public function setIsDisabled($isDisabled): void
{
$this->isDisabled = $isDisabled;
}
Expand All @@ -165,7 +165,7 @@ public function getStartDateAndTime()
*
* @param \DateTime|null $dateAndTime the start date and time
*/
public function setStartDateAndTime(\DateTime $dateAndTime = null)
public function setStartDateAndTime(\DateTime $dateAndTime = null): void
{
$this->startDateAndTime = $dateAndTime;
}
Expand All @@ -185,7 +185,7 @@ public function getEndDateAndTime()
*
* @param \DateTime|null $dateAndTime the end date and time
*/
public function setEndDateAndTime(\DateTime $dateAndTime = null)
public function setEndDateAndTime(\DateTime $dateAndTime = null): void
{
$this->endDateAndTime = $dateAndTime;
}
Expand All @@ -205,7 +205,7 @@ public function getEmail()
*
* @param string $email the e-mail address, may be empty
*/
public function setEmail($email)
public function setEmail($email): void
{
$this->email = $email;
}
Expand All @@ -225,7 +225,7 @@ public function getRealName()
*
* @param string $name the user's real name, may be empty.
*/
public function setRealName($name)
public function setRealName($name): void
{
$this->realName = $name;
}
Expand Down Expand Up @@ -285,7 +285,7 @@ public function getLastLoginDateAndTime()
*
* @param \DateTime|null $dateAndTime this user's last login date and time
*/
public function setLastLoginDateAndTime(\DateTime $dateAndTime = null)
public function setLastLoginDateAndTime(\DateTime $dateAndTime = null): void
{
$this->lastLoginDateAndTime = $dateAndTime;
}
Expand Down
Loading