Process tools page through Slim controller
This commit is contained in:
parent
2899ebb5b5
commit
ba43064ddb
7 changed files with 131 additions and 19 deletions
49
application/front/controller/admin/ToolsController.php
Normal file
49
application/front/controller/admin/ToolsController.php
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Shaarli\Front\Controller\Admin;
|
||||||
|
|
||||||
|
use Slim\Http\Request;
|
||||||
|
use Slim\Http\Response;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ToolsController
|
||||||
|
*
|
||||||
|
* Slim controller used to display the tools page.
|
||||||
|
*/
|
||||||
|
class ToolsController extends ShaarliAdminController
|
||||||
|
{
|
||||||
|
public function index(Request $request, Response $response): Response
|
||||||
|
{
|
||||||
|
$data = [
|
||||||
|
'pageabsaddr' => index_url($this->container->environment),
|
||||||
|
'sslenabled' => is_https($this->container->environment),
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->executeHooks($data);
|
||||||
|
|
||||||
|
foreach ($data as $key => $value) {
|
||||||
|
$this->assignView($key, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assignView('pagetitle', t('Tools') .' - '. $this->container->conf->get('general.title', 'Shaarli'));
|
||||||
|
|
||||||
|
return $response->write($this->render('tools'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed[] $data Variables passed to the template engine
|
||||||
|
*
|
||||||
|
* @return mixed[] Template data after active plugins render_picwall hook execution.
|
||||||
|
*/
|
||||||
|
protected function executeHooks(array $data): array
|
||||||
|
{
|
||||||
|
$this->container->pluginManager->executeHooks(
|
||||||
|
'render_tools',
|
||||||
|
$data
|
||||||
|
);
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
|
@ -36,7 +36,7 @@ http://<replace_domain>/?do=addlink
|
||||||
http://<replace_domain>/?do=changepasswd
|
http://<replace_domain>/?do=changepasswd
|
||||||
http://<replace_domain>/?do=changetag
|
http://<replace_domain>/?do=changetag
|
||||||
http://<replace_domain>/?do=configure
|
http://<replace_domain>/?do=configure
|
||||||
http://<replace_domain>/?do=tools
|
http://<replace_domain>/tools
|
||||||
http://<replace_domain>/daily
|
http://<replace_domain>/daily
|
||||||
http://<replace_domain>/?post
|
http://<replace_domain>/?post
|
||||||
http://<replace_domain>/?do=export
|
http://<replace_domain>/?do=export
|
||||||
|
|
18
index.php
18
index.php
|
@ -501,18 +501,7 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM
|
||||||
|
|
||||||
// -------- Display the Tools menu if requested (import/export/bookmarklet...)
|
// -------- Display the Tools menu if requested (import/export/bookmarklet...)
|
||||||
if ($targetPage == Router::$PAGE_TOOLS) {
|
if ($targetPage == Router::$PAGE_TOOLS) {
|
||||||
$data = [
|
header('Location: ./tools');
|
||||||
'pageabsaddr' => index_url($_SERVER),
|
|
||||||
'sslenabled' => is_https($_SERVER),
|
|
||||||
];
|
|
||||||
$pluginManager->executeHooks('render_tools', $data);
|
|
||||||
|
|
||||||
foreach ($data as $key => $value) {
|
|
||||||
$PAGE->assign($key, $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
$PAGE->assign('pagetitle', t('Tools') .' - '. $conf->get('general.title', 'Shaarli'));
|
|
||||||
$PAGE->renderPage('tools');
|
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -557,10 +546,10 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM
|
||||||
);
|
);
|
||||||
|
|
||||||
// TODO: do not handle exceptions/errors in JS.
|
// TODO: do not handle exceptions/errors in JS.
|
||||||
echo '<script>alert("'. $e->getMessage() .'");document.location=\'./?do=tools\';</script>';
|
echo '<script>alert("'. $e->getMessage() .'");document.location=\'./tools\';</script>';
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
echo '<script>alert("'. t('Your password has been changed') .'");document.location=\'./?do=tools\';</script>';
|
echo '<script>alert("'. t('Your password has been changed') .'");document.location=\'./tools\';</script>';
|
||||||
exit;
|
exit;
|
||||||
} else {
|
} else {
|
||||||
// show the change password form.
|
// show the change password form.
|
||||||
|
@ -1514,6 +1503,7 @@ function install($conf, $sessionManager, $loginManager)
|
||||||
|
|
||||||
/* -- LOGGED IN -- */
|
/* -- LOGGED IN -- */
|
||||||
$this->get('/logout', '\Shaarli\Front\Controller\Admin\LogoutController:index')->setName('logout');
|
$this->get('/logout', '\Shaarli\Front\Controller\Admin\LogoutController:index')->setName('logout');
|
||||||
|
$this->get('/tools', '\Shaarli\Front\Controller\Admin\ToolsController:index')->setName('tools');
|
||||||
|
|
||||||
$this
|
$this
|
||||||
->get('/links-per-page', '\Shaarli\Front\Controller\Admin\SessionFilterController:linksPerPage')
|
->get('/links-per-page', '\Shaarli\Front\Controller\Admin\SessionFilterController:linksPerPage')
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
namespace Shaarli\Front\Controller\Admin;
|
namespace Shaarli\Front\Controller\Admin;
|
||||||
|
|
||||||
/** Override PHP builtin setcookie function in the local namespace to mock it... more or less */
|
/** Override PHP builtin setcookie function in the local namespace to mock it... more or less */
|
||||||
if (!function_exists('Shaarli\Front\Controller\setcookie')) {
|
if (!function_exists('Shaarli\Front\Controller\Admin\setcookie')) {
|
||||||
function setcookie(string $name, string $value): void {
|
function setcookie(string $name, string $value): void {
|
||||||
$_COOKIE[$name] = $value;
|
$_COOKIE[$name] = $value;
|
||||||
}
|
}
|
||||||
|
|
73
tests/front/controller/admin/ToolsControllerTest.php
Normal file
73
tests/front/controller/admin/ToolsControllerTest.php
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Shaarli\Front\Controller\Admin;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Slim\Http\Request;
|
||||||
|
use Slim\Http\Response;
|
||||||
|
|
||||||
|
class ToolsControllerTestControllerTest extends TestCase
|
||||||
|
{
|
||||||
|
use FrontAdminControllerMockHelper;
|
||||||
|
|
||||||
|
/** @var ToolsController */
|
||||||
|
protected $controller;
|
||||||
|
|
||||||
|
public function setUp(): void
|
||||||
|
{
|
||||||
|
$this->createContainer();
|
||||||
|
|
||||||
|
$this->controller = new ToolsController($this->container);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDefaultInvokeWithHttps(): void
|
||||||
|
{
|
||||||
|
$this->createValidContainerMockSet();
|
||||||
|
|
||||||
|
$request = $this->createMock(Request::class);
|
||||||
|
$response = new Response();
|
||||||
|
|
||||||
|
$this->container->environment = [
|
||||||
|
'SERVER_NAME' => 'shaarli',
|
||||||
|
'SERVER_PORT' => 443,
|
||||||
|
'HTTPS' => 'on',
|
||||||
|
];
|
||||||
|
|
||||||
|
// Save RainTPL assigned variables
|
||||||
|
$assignedVariables = [];
|
||||||
|
$this->assignTemplateVars($assignedVariables);
|
||||||
|
|
||||||
|
$result = $this->controller->index($request, $response);
|
||||||
|
|
||||||
|
static::assertSame(200, $result->getStatusCode());
|
||||||
|
static::assertSame('tools', (string) $result->getBody());
|
||||||
|
static::assertSame('https://shaarli', $assignedVariables['pageabsaddr']);
|
||||||
|
static::assertTrue($assignedVariables['sslenabled']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDefaultInvokeWithoutHttps(): void
|
||||||
|
{
|
||||||
|
$this->createValidContainerMockSet();
|
||||||
|
|
||||||
|
$request = $this->createMock(Request::class);
|
||||||
|
$response = new Response();
|
||||||
|
|
||||||
|
$this->container->environment = [
|
||||||
|
'SERVER_NAME' => 'shaarli',
|
||||||
|
'SERVER_PORT' => 80,
|
||||||
|
];
|
||||||
|
|
||||||
|
// Save RainTPL assigned variables
|
||||||
|
$assignedVariables = [];
|
||||||
|
$this->assignTemplateVars($assignedVariables);
|
||||||
|
|
||||||
|
$result = $this->controller->index($request, $response);
|
||||||
|
|
||||||
|
static::assertSame(200, $result->getStatusCode());
|
||||||
|
static::assertSame('tools', (string) $result->getBody());
|
||||||
|
static::assertSame('http://shaarli', $assignedVariables['pageabsaddr']);
|
||||||
|
static::assertFalse($assignedVariables['sslenabled']);
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,7 +26,7 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="pure-menu-item" id="shaarli-menu-tools">
|
<li class="pure-menu-item" id="shaarli-menu-tools">
|
||||||
<a href="./?do=tools" class="pure-menu-link">{'Tools'|t}</a>
|
<a href="./tools" class="pure-menu-link">{'Tools'|t}</a>
|
||||||
</li>
|
</li>
|
||||||
{/if}
|
{/if}
|
||||||
<li class="pure-menu-item" id="shaarli-menu-tags">
|
<li class="pure-menu-item" id="shaarli-menu-tags">
|
||||||
|
|
|
@ -19,10 +19,10 @@
|
||||||
<li><a href="{$titleLink}" class="nomobile">Home</a></li>
|
<li><a href="{$titleLink}" class="nomobile">Home</a></li>
|
||||||
{if="$is_logged_in"}
|
{if="$is_logged_in"}
|
||||||
<li><a href="./logout">Logout</a></li>
|
<li><a href="./logout">Logout</a></li>
|
||||||
<li><a href="?do=tools">Tools</a></li>
|
<li><a href="./tools">Tools</a></li>
|
||||||
<li><a href="?do=addlink">Add link</a></li>
|
<li><a href="?do=addlink">Add link</a></li>
|
||||||
{elseif="$openshaarli"}
|
{elseif="$openshaarli"}
|
||||||
<li><a href="./?do=tools">Tools</a></li>
|
<li><a href="./tools">Tools</a></li>
|
||||||
<li><a href="./?do=addlink">Add link</a></li>
|
<li><a href="./?do=addlink">Add link</a></li>
|
||||||
{else}
|
{else}
|
||||||
<li><a href="./login">Login</a></li>
|
<li><a href="./login">Login</a></li>
|
||||||
|
|
Loading…
Reference in a new issue