Files
MokoSuiteCross/source/packages/com_mokosuitecross/src/View/Posts/HtmlView.php
T
Jonathan Miller 0cb24b4759
Universal: Auto Version Bump / Version Bump (push) Successful in 17s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 24s
feat: full ACL system with 12 granular permissions across entire codebase
access.xml: 12 component-specific actions added:
- mokosuitecross.crosspost (auto cross-post on publish)
- mokosuitecross.crosspost.manual (manually create posts)
- mokosuitecross.delete.remote (delete from remote platforms)
- mokosuitecross.services.manage (create/edit/delete services)
- mokosuitecross.services.credentials (view decrypted credentials)
- mokosuitecross.templates.manage (create/edit/delete templates)
- mokosuitecross.logs.view (view activity logs)
- mokosuitecross.logs.purge (purge old logs)
- mokosuitecross.queue.manage (manage post queue)
- mokosuitecross.queue.export (export posts as CSV)
- mokosuitecross.dispatch (trigger REST API dispatch)
- mokosuitecross.migrate (run Perfect Publisher migration)

config.xml: permissions fieldset with rules field for admin UI.

Enforcement:
- DisplayController: core.manage gate on all views
- ServicesController: publish/delete ACL checks
- TemplatesController: publish/delete ACL checks
- PostsController: queue.export permission
- ServiceController: services.manage for test connection
- DispatchController: dispatch permission for REST API
- All list views: preferences button gated by core.admin
- All edit views: save/apply buttons gated by section permission
- MokoSuiteCrossHelper::getActions() centralizes ACL lookups
2026-06-23 14:21:55 -05:00

85 lines
2.7 KiB
PHP

<?php
/**
* @package MokoSuiteCross
* @subpackage com_mokosuitecross
* @author Moko Consulting <hello@mokoconsulting.tech>
* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved.
* @license GNU General Public License version 3 or later; see LICENSE
* SPDX-License-Identifier: GPL-3.0-or-later
*/
namespace Joomla\Component\MokoSuiteCross\Administrator\View\Posts;
defined('_JEXEC') or die;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Toolbar\Toolbar;
use Joomla\CMS\Toolbar\ToolbarHelper;
use Joomla\Component\MokoSuiteCross\Administrator\Helper\MokoSuiteCrossHelper;
class HtmlView extends BaseHtmlView
{
protected $items;
protected $pagination;
protected $state;
public $filterForm;
public $activeFilters;
public $sidebar;
public function display($tpl = null): void
{
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
$this->state = $this->get('State');
$this->filterForm = $this->get('FilterForm');
$this->activeFilters = $this->get('ActiveFilters');
$this->addToolbar();
parent::display($tpl);
}
protected function addToolbar(): void
{
$canDo = MokoSuiteCrossHelper::getActions();
ToolbarHelper::title('MokoSuiteCross — Post Queue', 'share-alt');
ToolbarHelper::addNew('post.add');
$toolbar = Toolbar::getInstance('toolbar');
$toolbar->standardButton('retry', 'COM_MOKOSUITECROSS_TOOLBAR_RETRY_FAILED', 'posts.retryFailed')
->icon('icon-refresh')
->listCheck(false);
$toolbar->standardButton('purge', 'COM_MOKOSUITECROSS_TOOLBAR_PURGE_POSTED', 'posts.purgePosted')
->icon('icon-trash')
->listCheck(false);
$toolbar->standardButton('retry-selected', 'COM_MOKOSUITECROSS_TOOLBAR_RETRY_SELECTED', 'posts.retrySelected')
->icon('icon-redo')
->listCheck(true);
$toolbar->standardButton('schedule', 'COM_MOKOSUITECROSS_TOOLBAR_SCHEDULE', 'posts.schedule')
->icon('icon-calendar')
->listCheck(true);
ToolbarHelper::deleteList('', 'posts.delete', 'JTOOLBAR_DELETE');
// Export CSV button
$toolbar->appendButton(
'Link',
'download',
'COM_MOKOSUITECROSS_EXPORT_CSV',
Route::_('index.php?option=com_mokosuitecross&task=posts.exportCsv&format=raw', false)
);
// Dashboard link in toolbar
$toolbar->appendButton(
'Link',
'home',
'COM_MOKOSUITECROSS_SUBMENU_DASHBOARD',
Route::_('index.php?option=com_mokosuitecross&view=dashboard', false)
);
}
}