Newer
Older
use Courseware\BlockTypes\BlockType;
use Courseware\ContainerTypes\ContainerType;
/**
* @SuppressWarnings(PHPMD.CamelCaseClassName)
* @SuppressWarnings(PHPMD.CamelCaseMethodName)
* @SuppressWarnings(PHPMD.StaticAccess)
*/
class Admin_CoursewareController extends AuthenticatedController
{
/**
* @SuppressWarnings(PHPMD.Superglobals)
*/
public function before_filter(&$action, &$args)
{
parent::before_filter($action, $args);
$GLOBALS['perm']->check('root');
PageLayout::setTitle(_('Coursewareverwaltung'));
Navigation::activateItem('/admin/locations/courseware');
}
public function index_action()
{
$this->setSidebar();
}
public function block_types_action()
{
PageLayout::addStyleSheet('courseware.css');
$views = Sidebar::get()->addWidget(new ViewsWidget());
$views->addLink(_('Templates'), $this->indexURL());
$views->addLink(_('Block-Typen'), $this->block_typesURL())->setActive(true);
$views->addLink(_('Container-Typen'), $this->container_typesURL());
$this->blockTypes = BlockType::getBlockTypes();
usort(
$this->blockTypes,
fn ($blockTypeA, $blockTypeB) => $blockTypeA::getTitle() <=> $blockTypeB::getTitle()
);
}
public function bulk_block_types_action()
{
CSRFProtection::verifyUnsafeRequest();
switch (Request::option('bulk_action')) {
case 'activate':
return $this->activate_block_types_action();
case 'deactivate':
return $this->deactivate_block_types_action();
}
PageLayout::postInfo(_('Keine Aktion ausgewählt.'));
$this->redirect($this->action_url('block_types'));
}
/**
*/
public function activate_block_types_action()
{
CSRFProtection::verifyUnsafeRequest();
$requestedBlockTypes = $this->validateBlockTypes();
$changed = array_sum(
array_map(
fn ($blockType) => $blockType::activate() ? 1 : 0,
);
PageLayout::postSuccess(
sprintf(
ngettext('Block-Typ erfolgreich aktiviert.', '%d Block-Typen erfolgreich aktiviert.', $changed),
$changed
)
);
$this->redirect($this->action_url('block_types'));
}
/**
*/
public function deactivate_block_types_action()
{
CSRFProtection::verifyUnsafeRequest();
$requestedBlockTypes = $this->validateBlockTypes();
$changed = array_sum(
array_map(
fn ($blockType) => $blockType::deactivate() ? 1 : 0,
$requestedBlockTypes
)
);
PageLayout::postSuccess(
sprintf(
ngettext('Block-Typ erfolgreich deaktiviert.', '%d Block-Typen erfolgreich deaktiviert.', $changed),
$changed
)
);
$this->redirect($this->action_url('block_types'));
}
private function validateBlockTypes(): iterable
{
$requestedBlockTypes = Request::getArray('block_types');
$diff = array_diff($requestedBlockTypes, BlockType::getBlockTypes());
if (count($diff) > 0) {
throw new Trails\Exception(400);
}
return $requestedBlockTypes;
}
public function container_types_action()
{
PageLayout::addStyleSheet('courseware.css');
$views = Sidebar::get()->addWidget(new ViewsWidget());
$views->addLink(_('Templates'), $this->indexURL());
$views->addLink(_('Block-Typen'), $this->block_typesURL());
$views->addLink(_('Container-Typen'), $this->container_typesURL())->setActive(true);
$this->containerTypes = ContainerType::getContainerTypes();
usort(
$this->containerTypes,
fn ($containerTypeA, $containerTypeB) => $containerTypeA::getTitle() <=> $containerTypeB::getTitle(),
);
}
public function bulk_container_types_action()
{
CSRFProtection::verifyUnsafeRequest();
switch (Request::quoted('bulk_action')) {
case 'activate':
return $this->activate_container_types_action();
case 'deactivate':
return $this->deactivate_container_types_action();
}
PageLayout::postInfo(_('Keine Aktion ausgewählt.'));
$this->redirect($this->action_url('container_types'));
}
/**
*/
public function activate_container_types_action()
{
CSRFProtection::verifyUnsafeRequest();
$requestedContainerTypes = $this->validateContainerTypes();
$changed = array_sum(
array_map(
fn ($containerType) => $containerType::activate() ? 1 : 0,
$requestedContainerTypes
)
);
PageLayout::postSuccess(
sprintf(
ngettext('Container-Typ erfolgreich aktiviert.', '%d Container-Typen erfolgreich aktiviert.', $changed),
$changed
)
);
$this->redirect($this->action_url('container_types'));
}
/**
*/
public function deactivate_container_types_action()
{
CSRFProtection::verifyUnsafeRequest();
$requestedContainerTypes = $this->validateContainerTypes();
$changed = array_sum(
array_map(
fn ($containerType) => $containerType::deactivate() ? 1 : 0,
$requestedContainerTypes
)
);
PageLayout::postSuccess(
sprintf(
ngettext('Container-Typ erfolgreich deaktiviert.', '%d Container-Typen erfolgreich deaktiviert.', $changed),
$changed
)
);
$this->redirect($this->action_url('container_types'));
}
private function validateContainerTypes(): iterable
{
$requestedContainerTypes = Request::getArray('container_types');
$diff = array_diff($requestedContainerTypes, ContainerType::getContainerTypes());
if (count($diff)) {
throw new Trails\Exception(400);
}
return $requestedContainerTypes;
}
private function setSidebar()
{
$sidebar = Sidebar::Get();
$views = new TemplateWidget(
_('Ansichten'),
$this->get_template_factory()->open('admin/courseware/admin_view_widget')
);
$sidebar->addWidget($views)->addLayoutCSSClass('courseware-admin-view-widget');
$views = new TemplateWidget(
_('Aktionen'),
$this->get_template_factory()->open('admin/courseware/admin_action_widget')
);
$sidebar->addWidget($views)->addLayoutCSSClass('courseware-admin-action-widget');
}