use OCP\AppFramework\Http\StandaloneTemplateResponse;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Middleware;
-use OCP\AppFramework\PublicShareController;
-use OCP\EventDispatcher\GenericEvent;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IUserSession;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class AdditionalScriptsMiddleware extends Middleware {
- /** @var EventDispatcherInterface */
- private $legacyDispatcher;
- /** @var IUserSession */
- private $userSession;
- /** @var IEventDispatcher */
- private $dispatcher;
-
- public function __construct(EventDispatcherInterface $legacyDispatcher, IUserSession $userSession, IEventDispatcher $dispatcher) {
- $this->legacyDispatcher = $legacyDispatcher;
- $this->userSession = $userSession;
- $this->dispatcher = $dispatcher;
+ public function __construct(
+ private IUserSession $userSession,
+ private IEventDispatcher $dispatcher,
+ ) {
}
public function afterController($controller, $methodName, Response $response): Response {
if ($response instanceof TemplateResponse) {
- if (!$controller instanceof PublicShareController) {
- /*
- * The old event was not dispatched on the public share controller as there was
- * OCA\Files_Sharing::loadAdditionalScripts for that. This is kept for compatibility reasons
- * only for the old event as this is now also included in BeforeTemplateRenderedEvent
- */
- $this->legacyDispatcher->dispatch(TemplateResponse::EVENT_LOAD_ADDITIONAL_SCRIPTS, new GenericEvent());
- }
-
- if (!($response instanceof StandaloneTemplateResponse) && $this->userSession->isLoggedIn()) {
- $this->legacyDispatcher->dispatch(TemplateResponse::EVENT_LOAD_ADDITIONAL_SCRIPTS_LOGGEDIN, new GenericEvent());
- $isLoggedIn = true;
- } else {
- $isLoggedIn = false;
- }
-
+ $isLoggedIn = !($response instanceof StandaloneTemplateResponse) && $this->userSession->isLoggedIn();
$this->dispatcher->dispatchTyped(new BeforeTemplateRenderedEvent($isLoggedIn, $response));
}
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IUserSession;
use PHPUnit\Framework\MockObject\MockObject;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class AdditionalScriptsMiddlewareTest extends \Test\TestCase {
- /** @var EventDispatcherInterface|MockObject */
- private $legacyDispatcher;
/** @var IUserSession|MockObject */
private $userSession;
protected function setUp(): void {
parent::setUp();
- $this->legacyDispatcher = $this->createMock(EventDispatcherInterface::class);
$this->userSession = $this->createMock(IUserSession::class);
$this->dispatcher = $this->createMock(IEventDispatcher::class);
$this->middleWare = new AdditionalScriptsMiddleware(
- $this->legacyDispatcher,
$this->userSession,
$this->dispatcher
);
}
public function testNoTemplateResponse() {
- $this->legacyDispatcher->expects($this->never())
- ->method($this->anything());
$this->userSession->expects($this->never())
->method($this->anything());
$this->dispatcher->expects($this->never())
}
public function testPublicShareController() {
- $this->legacyDispatcher->expects($this->never())
- ->method($this->anything());
$this->userSession->expects($this->never())
->method($this->anything());
$this->dispatcher->expects($this->never())
}
public function testStandaloneTemplateResponse() {
- $this->legacyDispatcher->expects($this->once())
- ->method('dispatch')
- ->willReturnCallback(function ($eventName) {
- if ($eventName === TemplateResponse::EVENT_LOAD_ADDITIONAL_SCRIPTS) {
- return;
- }
-
- $this->fail('Wrong event dispatched');
- });
$this->userSession->expects($this->never())
->method($this->anything());
$this->dispatcher->expects($this->once())
}
public function testTemplateResponseNotLoggedIn() {
- $this->legacyDispatcher->expects($this->once())
- ->method('dispatch')
- ->willReturnCallback(function ($eventName) {
- if ($eventName === TemplateResponse::EVENT_LOAD_ADDITIONAL_SCRIPTS) {
- return;
- }
-
- $this->fail('Wrong event dispatched');
- });
$this->userSession->method('isLoggedIn')
->willReturn(false);
$this->dispatcher->expects($this->once())
public function testTemplateResponseLoggedIn() {
$events = [];
- $this->legacyDispatcher->expects($this->exactly(2))
- ->method('dispatch')
- ->willReturnCallback(function ($eventName) use (&$events) {
- if ($eventName === TemplateResponse::EVENT_LOAD_ADDITIONAL_SCRIPTS ||
- $eventName === TemplateResponse::EVENT_LOAD_ADDITIONAL_SCRIPTS_LOGGEDIN) {
- $events[] = $eventName;
- return;
- }
-
- $this->fail('Wrong event dispatched');
- });
$this->userSession->method('isLoggedIn')
->willReturn(true);
$this->dispatcher->expects($this->once())
});
$this->middleWare->afterController($this->controller, 'myMethod', $this->createMock(TemplateResponse::class));
-
- $this->assertContains(TemplateResponse::EVENT_LOAD_ADDITIONAL_SCRIPTS, $events);
- $this->assertContains(TemplateResponse::EVENT_LOAD_ADDITIONAL_SCRIPTS_LOGGEDIN, $events);
}
}