Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
61 changes: 4 additions & 57 deletions wcfsetup/install/files/acp/templates/bbcodeMediaProviderList.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<header class="contentHeader">
<div class="contentHeaderTitle">
<h1 class="contentTitle">{lang}wcf.acp.bbcode.mediaProvider.list{/lang}{if $items} <span class="badge badgeInverse">{#$items}</span>{/if}</h1>
<h1 class="contentTitle">{lang}wcf.acp.bbcode.mediaProvider.list{/lang}</h1>
</div>

<nav class="contentHeaderNavigation">
Expand All @@ -14,61 +14,8 @@
</nav>
</header>

{hascontent}
<div class="paginationTop">
{content}{pages print=true assign=pagesLinks controller="BBCodeMediaProviderList" link="pageNo=%d&sortField=$sortField&sortOrder=$sortOrder"}{/content}
</div>
{/hascontent}

{if $objects|count}
<div class="section tabularBox">
<table class="table jsObjectActionContainer" data-object-action-class-name="wcf\data\bbcode\media\provider\BBCodeMediaProviderAction">
<thead>
<tr>
<th class="columnID columnMediaProviderID{if $sortField == 'providerID'} active {@$sortOrder}{/if}" colspan="2"><a href="{link controller='BBCodeMediaProviderList'}pageNo={@$pageNo}&sortField=providerID&sortOrder={if $sortField == 'providerID' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.global.objectID{/lang}</a></th>
<th class="columnTitle columnMediaProviderTitle{if $sortField == 'title'} active {@$sortOrder}{/if}"><a href="{link controller='BBCodeMediaProviderList'}pageNo={@$pageNo}&sortField=title&sortOrder={if $sortField == 'title' && $sortOrder == 'ASC'}DESC{else}ASC{/if}{/link}">{lang}wcf.acp.bbcode.mediaProvider.title{/lang}</a></th>

{event name='columnHeads'}
</tr>
</thead>

<tbody class="jsReloadPageWhenEmpty">
{foreach from=$objects item='mediaProvider'}
<tr class="jsMediaProviderRow jsObjectActionObject" data-object-id="{@$mediaProvider->getObjectID()}">
<td class="columnIcon">
{objectAction action="toggle" isDisabled=$mediaProvider->isDisabled}
<a href="{link controller='BBCodeMediaProviderEdit' object=$mediaProvider}{/link}" title="{lang}wcf.global.button.edit{/lang}" class="jsTooltip">{icon name='pencil'}</a>
{objectAction action="delete" objectTitle=$mediaProvider->getTitle()}

{event name='rowButtons'}
</td>
<td class="columnID">{@$mediaProvider->providerID}</td>
<td class="columnTitle columnMediaProviderTitle"><a href="{link controller='BBCodeMediaProviderEdit' object=$mediaProvider}{/link}">{$mediaProvider->title}</a></td>

{event name='columns'}
</tr>
{/foreach}
</tbody>
</table>
</div>

<footer class="contentFooter">
{hascontent}
<div class="paginationBottom">
{content}{@$pagesLinks}{/content}
</div>
{/hascontent}

<nav class="contentFooterNavigation">
<ul>
<li><a href="{link controller='BBCodeMediaProviderAdd'}{/link}" class="button">{icon name='plus'} <span>{lang}wcf.acp.bbcode.mediaProvider.add{/lang}</span></a></li>

{event name='contentFooterNavigation'}
</ul>
</nav>
</footer>
{else}
<woltlab-core-notice type="info">{lang}wcf.global.noItems{/lang}</woltlab-core-notice>
{/if}
<div class="section">
{unsafe:$gridView->render()}
</div>

{include file='footer'}
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,39 @@

namespace wcf\acp\page;

use wcf\data\bbcode\media\provider\BBCodeMediaProviderList;
use wcf\page\SortablePage;
use wcf\page\AbstractGridViewPage;
use wcf\system\gridView\AbstractGridView;
use wcf\system\gridView\admin\BBCodeMediaProviderGridView;

/**
* Lists the available media providers.
*
* @author Tim Duesterhus
* @copyright 2001-2019 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
* @author Olaf Braun, Tim Duesterhus
* @copyright 2001-2025 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
*
* @property BBCodeMediaProviderList $objectList
* @property BBCodeMediaProviderGridView $gridView
*/
class BBCodeMediaProviderListPage extends SortablePage
class BBCodeMediaProviderListPage extends AbstractGridViewPage
{
/**
* @inheritDoc
*/
public $activeMenuItem = 'wcf.acp.menu.link.bbcode.mediaProvider.list';

/**
* @inheritDoc
*/
public $defaultSortField = 'title';

/**
* @inheritDoc
*/
public $neededPermissions = ['admin.content.bbcode.canManageBBCode'];

/**
* @inheritDoc
*/
public $objectListClassName = BBCodeMediaProviderList::class;

/**
* @inheritDoc
*/
public $templateName = 'bbcodeMediaProviderList';

/**
* @inheritDoc
*/
public $validSortFields = ['providerID', 'title'];
#[\Override]
protected function createGridViewController(): AbstractGridView
{
return new BBCodeMediaProviderGridView();
}
}
3 changes: 3 additions & 0 deletions wcfsetup/install/files/lib/bootstrap/com.woltlab.wcf.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,9 @@ static function (\wcf\event\endpoint\ControllerCollecting $event) {
$event->register(new \wcf\system\endpoint\controller\core\users\ranks\DeleteUserRank());
$event->register(new \wcf\system\endpoint\controller\core\interactions\GetBulkContextMenuOptions());
$event->register(new \wcf\system\endpoint\controller\core\interactions\GetContextMenuOptions());
$event->register(new \wcf\system\endpoint\controller\core\bbcodes\media\providers\DeleteProvider());
$event->register(new \wcf\system\endpoint\controller\core\bbcodes\media\providers\DisableProvider());
$event->register(new \wcf\system\endpoint\controller\core\bbcodes\media\providers\EnableProvider());
}
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
* @property-read string $regex regular expression to recognize media elements/element urls
* @property-read string $html html code used to render media elements
* @property-read string $className callback class name
* @property-read int $isDisabled
*/
class BBCodeMediaProvider extends DatabaseObject implements IRouteController
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace wcf\event\gridView\admin;

use wcf\event\IPsr14Event;
use wcf\system\gridView\admin\BBCodeMediaProviderGridView;

/**
* Indicates that the bb code media provider grid view has been initialized.
*
* @author Olaf Braun
* @copyright 2001-2025 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
* @since 6.2
*/
final class BBCodeMediaProviderGridViewInitialized implements IPsr14Event
{
public function __construct(public readonly BBCodeMediaProviderGridView $gridView)
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace wcf\event\interaction\admin;

use wcf\event\IPsr14Event;
use wcf\system\interaction\admin\BBCodeMediaProviderInteractions;

/**
* Indicates that the provider for bb code media provider interactions has been initialized.
*
* @author Olaf Braun
* @copyright 2001-2025 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
* @since 6.2
*/
final class BBCodeMediaProviderInteractionCollecting implements IPsr14Event
{
public function __construct(public readonly BBCodeMediaProviderInteractions $provider)
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

namespace wcf\system\endpoint\controller\core\bbcodes\media\providers;

use Laminas\Diactoros\Response\JsonResponse;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use wcf\data\bbcode\media\provider\BBCodeMediaProvider;
use wcf\data\bbcode\media\provider\BBCodeMediaProviderAction;
use wcf\http\Helper;
use wcf\system\endpoint\DeleteRequest;
use wcf\system\endpoint\IController;
use wcf\system\WCF;

/**
* API endpoint for deleting bb code media provider.
*
* @author Olaf Braun
* @copyright 2001-2025 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
* @since 6.2
*/
#[DeleteRequest('/core/bb-codes/media/providers/{id:\d+}')]
final class DeleteProvider implements IController
{
#[\Override]
public function __invoke(ServerRequestInterface $request, array $variables): ResponseInterface
{
$provider = Helper::fetchObjectFromRequestParameter($variables['id'], BBCodeMediaProvider::class);

$this->assertMediaProviderCanBeDeleted();

(new BBCodeMediaProviderAction([$provider], 'delete'))->executeAction();

return new JsonResponse([]);
}

private function assertMediaProviderCanBeDeleted(): void
{
WCF::getSession()->checkPermissions(['admin.content.bbcode.canManageBBCode']);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

namespace wcf\system\endpoint\controller\core\bbcodes\media\providers;

use Laminas\Diactoros\Response\JsonResponse;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use wcf\data\bbcode\media\provider\BBCodeMediaProvider;
use wcf\data\bbcode\media\provider\BBCodeMediaProviderAction;
use wcf\http\Helper;
use wcf\system\endpoint\IController;
use wcf\system\endpoint\PostRequest;
use wcf\system\exception\PermissionDeniedException;
use wcf\system\WCF;

/**
* API endpoint for disabling bb code media provider.
*
* @author Olaf Braun
* @copyright 2001-2025 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
* @since 6.2
*/
#[PostRequest('/core/bb-codes/media/providers/{id:\d+}/disable')]
final class DisableProvider implements IController
{
#[\Override]
public function __invoke(ServerRequestInterface $request, array $variables): ResponseInterface
{
$provider = Helper::fetchObjectFromRequestParameter($variables['id'], BBCodeMediaProvider::class);

$this->assertMediaProviderCanBeDisabled($provider);

(new BBCodeMediaProviderAction([$provider], 'toggle'))->executeAction();

return new JsonResponse([]);
}

private function assertMediaProviderCanBeDisabled(BBCodeMediaProvider $provider): void
{
WCF::getSession()->checkPermissions(['admin.content.bbcode.canManageBBCode']);

if ($provider->isDisabled) {
throw new PermissionDeniedException();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

namespace wcf\system\endpoint\controller\core\bbcodes\media\providers;

use Laminas\Diactoros\Response\JsonResponse;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use wcf\data\bbcode\media\provider\BBCodeMediaProvider;
use wcf\data\bbcode\media\provider\BBCodeMediaProviderAction;
use wcf\http\Helper;
use wcf\system\endpoint\IController;
use wcf\system\endpoint\PostRequest;
use wcf\system\exception\PermissionDeniedException;
use wcf\system\WCF;

/**
* API endpoint for enabling bb code media provider.
*
* @author Olaf Braun
* @copyright 2001-2025 WoltLab GmbH
* @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
* @since 6.2
*/
#[PostRequest('/core/bb-codes/media/providers/{id:\d+}/enable')]
final class EnableProvider implements IController
{
#[\Override]
public function __invoke(ServerRequestInterface $request, array $variables): ResponseInterface
{
$provider = Helper::fetchObjectFromRequestParameter($variables['id'], BBCodeMediaProvider::class);

$this->assertMediaProviderCanBeEnabled($provider);

(new BBCodeMediaProviderAction([$provider], 'toggle'))->executeAction();

return new JsonResponse([]);
}

private function assertMediaProviderCanBeEnabled(BBCodeMediaProvider $provider): void
{
WCF::getSession()->checkPermissions(['admin.content.bbcode.canManageBBCode']);

if (!$provider->isDisabled) {
throw new PermissionDeniedException();
}
}
}
Loading