first commit
This commit is contained in:
134
administrator/components/com_users/tmpl/captive/default.php
Normal file
134
administrator/components/com_users/tmpl/captive/default.php
Normal file
@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2022 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\Component\Users\Administrator\Model\CaptiveModel;
|
||||
use Joomla\Component\Users\Administrator\View\Captive\HtmlView;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
|
||||
/**
|
||||
* @var HtmlView $this View object
|
||||
* @var CaptiveModel $model The model
|
||||
*/
|
||||
$model = $this->getModel();
|
||||
|
||||
$this->document->getWebAssetManager()
|
||||
->useScript('com_users.two-factor-focus');
|
||||
|
||||
?>
|
||||
<div class="users-mfa-captive card card-body">
|
||||
<h2 id="users-mfa-title">
|
||||
<?php if (!empty($this->title)) : ?>
|
||||
<?php echo $this->title ?> <small> –
|
||||
<?php endif; ?>
|
||||
<?php if (!$this->allowEntryBatching) : ?>
|
||||
<?php echo $this->escape($this->record->title) ?>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($this->getModel()->translateMethodName($this->record->method)) ?>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($this->title)) : ?>
|
||||
</small>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($this->renderOptions['help_url'])) : ?>
|
||||
<span class="float-end">
|
||||
<a href="<?php echo $this->renderOptions['help_url'] ?>"
|
||||
class="btn btn-sm btn-secondary"
|
||||
target="_blank"
|
||||
>
|
||||
<span class="icon icon-question-sign" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"><?php echo Text::_('JHELP') ?></span>
|
||||
</a>
|
||||
</span>
|
||||
<?php endif;?>
|
||||
</h2>
|
||||
|
||||
<?php if ($this->renderOptions['pre_message']) : ?>
|
||||
<div class="users-mfa-captive-pre-message text-muted">
|
||||
<?php echo $this->renderOptions['pre_message'] ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&task=captive.validate&record_id=' . ((int) $this->record->id)) ?>"
|
||||
id="users-mfa-captive-form"
|
||||
method="post"
|
||||
class="form-horizontal"
|
||||
>
|
||||
<?php echo HTMLHelper::_('form.token') ?>
|
||||
|
||||
<div id="users-mfa-captive-form-method-fields" class="container">
|
||||
<?php if ($this->renderOptions['field_type'] == 'custom') : ?>
|
||||
<?php echo $this->renderOptions['html']; ?>
|
||||
<?php endif; ?>
|
||||
<div class="row mb-3 <?php echo $this->renderOptions['input_type'] === 'hidden' ? 'd-none' : '' ?>">
|
||||
<?php if ($this->renderOptions['label']) : ?>
|
||||
<label for="users-mfa-code" class="col-sm-3 col-form-label">
|
||||
<?php echo $this->renderOptions['label'] ?>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
<?php
|
||||
$attributes = array_merge(
|
||||
[
|
||||
'type' => $this->renderOptions['input_type'],
|
||||
'name' => 'code',
|
||||
'value' => '',
|
||||
'placeholder' => $this->renderOptions['placeholder'] ?? null,
|
||||
'id' => 'users-mfa-code',
|
||||
'class' => 'form-control',
|
||||
'autocomplete' => $this->renderOptions['autocomplete'] ?? 'one-time-code'
|
||||
],
|
||||
$this->renderOptions['input_attributes']
|
||||
);
|
||||
|
||||
if (strpos($attributes['class'], 'form-control') === false) {
|
||||
$attributes['class'] .= ' form-control';
|
||||
}
|
||||
?>
|
||||
<input <?php echo ArrayHelper::toString($attributes) ?>>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="users-mfa-captive-form-standard-buttons" class="row my-3 d-sm-none">
|
||||
<div class="col-sm-9 offset-sm-3">
|
||||
<button class="btn btn-primary me-3 <?php echo $this->renderOptions['submit_class'] ?>"
|
||||
id="users-mfa-captive-button-submit"
|
||||
style="<?php echo $this->renderOptions['hide_submit'] ? 'display: none' : '' ?>"
|
||||
type="submit">
|
||||
<span class="<?php echo $this->renderOptions['submit_icon'] ?>" aria-hidden="true"></span>
|
||||
<?php echo Text::_($this->renderOptions['submit_text']); ?>
|
||||
</button>
|
||||
|
||||
<a href="<?php echo Route::_('index.php?option=com_login&task=logout&' . Factory::getApplication()->getFormToken() . '=1') ?>"
|
||||
class="btn btn-danger btn-sm"
|
||||
id="users-mfa-captive-button-logout">
|
||||
<span class="icon icon-lock" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_USERS_MFA_LOGOUT'); ?>
|
||||
</a>
|
||||
|
||||
<?php if (count($this->records) > 1) : ?>
|
||||
<a id="users-mfa-captive-form-choose-another"
|
||||
class="btn btn-link"
|
||||
href="<?php echo Route::_('index.php?option=com_users&view=captive&task=select') ?>">
|
||||
<?php echo Text::_('COM_USERS_MFA_USE_DIFFERENT_METHOD'); ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<?php if ($this->renderOptions['post_message']) : ?>
|
||||
<div class="users-mfa-captive-post-message">
|
||||
<?php echo $this->renderOptions['post_message'] ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
78
administrator/components/com_users/tmpl/captive/select.php
Normal file
78
administrator/components/com_users/tmpl/captive/select.php
Normal file
@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2022 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
// Prevent direct access
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
use Joomla\Component\Users\Administrator\View\Captive\HtmlView;
|
||||
|
||||
/** @var HtmlView $this */
|
||||
|
||||
$shownMethods = [];
|
||||
|
||||
?>
|
||||
<div id="com-users-select">
|
||||
<h2 id="com-users-select-heading">
|
||||
<?php echo Text::_('COM_USERS_MFA_SELECT_PAGE_HEAD'); ?>
|
||||
</h2>
|
||||
<div id="com-users-select-information">
|
||||
<p>
|
||||
<?php echo Text::_('COM_USERS_LBL_SELECT_INSTRUCTIONS'); ?>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="com-users-select-methods p-2">
|
||||
<?php foreach ($this->records as $record) :
|
||||
if (!array_key_exists($record->method, $this->mfaMethods) && ($record->method != 'backupcodes')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$allowEntryBatching = isset($this->mfaMethods[$record->method]) ? $this->mfaMethods[$record->method]['allowEntryBatching'] : false;
|
||||
|
||||
if ($this->allowEntryBatching) {
|
||||
if ($allowEntryBatching && in_array($record->method, $shownMethods)) {
|
||||
continue;
|
||||
}
|
||||
$shownMethods[] = $record->method;
|
||||
}
|
||||
|
||||
$methodName = $this->getModel()->translateMethodName($record->method);
|
||||
?>
|
||||
<a class="com-users-method p-2 border-top border-dark bg-light d-flex flex-row flex-wrap justify-content-start align-items-center text-decoration-none gap-2 text-body"
|
||||
href="<?php echo Route::_('index.php?option=com_users&view=captive&record_id=' . $record->id)?>">
|
||||
<img src="<?php echo Uri::root() . $this->getModel()->getMethodImage($record->method) ?>"
|
||||
alt="<?php echo $this->escape(strip_tags($record->title)) ?>"
|
||||
class="com-users-method-image img-fluid" />
|
||||
<?php if (!$this->allowEntryBatching || !$allowEntryBatching) : ?>
|
||||
<span class="com-users-method-title flex-grow-1 fs-5 fw-bold">
|
||||
<?php if ($record->method === 'backupcodes') : ?>
|
||||
<?php echo $record->title ?>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($record->title) ?>
|
||||
<?php endif; ?>
|
||||
</span>
|
||||
<small class="com-users-method-name text-muted">
|
||||
<?php echo $methodName ?>
|
||||
</small>
|
||||
<?php else : ?>
|
||||
<span class="com-users-method-title flex-grow-1 fs-5 fw-bold">
|
||||
<?php echo $methodName ?>
|
||||
</span>
|
||||
<small class="com-users-method-name text-muted">
|
||||
<?php echo $methodName ?>
|
||||
</small>
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
158
administrator/components/com_users/tmpl/debuggroup/default.php
Normal file
158
administrator/components/com_users/tmpl/debuggroup/default.php
Normal file
@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2010 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
$listOrder = $this->escape($this->state->get('list.ordering'));
|
||||
$listDirn = $this->escape($this->state->get('list.direction'));
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('table.columns');
|
||||
|
||||
?>
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&view=debuggroup&group_id=' . (int) $this->state->get('group_id')); ?>" method="post" name="adminForm" id="adminForm">
|
||||
<div id="j-main-container" class="j-main-container">
|
||||
<?php echo LayoutHelper::render('joomla.searchtools.default', ['view' => $this]); ?>
|
||||
<?php if (empty($this->items)) : ?>
|
||||
<div class="alert alert-info">
|
||||
<span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
|
||||
<?php echo Text::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<?php
|
||||
// Split the actions table
|
||||
foreach ($this->actions as $action) :
|
||||
$name = $action[0];
|
||||
if (in_array($name, ['core.login.site', 'core.login.admin', 'core.login.offline', 'core.login.api', 'core.admin'])) :
|
||||
$loginActions[] = $action;
|
||||
else :
|
||||
$actions[] = $action;
|
||||
endif;
|
||||
endforeach;
|
||||
?>
|
||||
<div class="d-flex flex-wrap">
|
||||
<?php foreach ($loginActions as $action) :
|
||||
$name = $action[0];
|
||||
$check = $this->items[0]->checks[$name];
|
||||
if ($check === true) :
|
||||
$class = 'text-success icon-check';
|
||||
$button = 'btn-success';
|
||||
$text = Text::_('COM_USERS_DEBUG_EXPLICIT_ALLOW');
|
||||
elseif ($check === false) :
|
||||
$class = 'text-danger icon-times';
|
||||
$button = 'btn-danger';
|
||||
$text = Text::_('COM_USERS_DEBUG_EXPLICIT_DENY');
|
||||
elseif ($check === null) :
|
||||
$class = 'text-danger icon-minus-circle';
|
||||
$button = 'btn-warning';
|
||||
$text = Text::_('COM_USERS_DEBUG_IMPLICIT_DENY');
|
||||
endif; ?>
|
||||
<div class="d-inline p-2">
|
||||
<?php echo Text::_($action[1]); ?>
|
||||
<span class="<?php echo $class; ?>" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"><?php echo $text; ?></span>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<table class="table">
|
||||
<caption class="visually-hidden">
|
||||
<?php echo Text::_('COM_USERS_DEBUG_GROUP_TABLE_CAPTION'); ?>,
|
||||
<span id="orderedBy"><?php echo Text::_('JGLOBAL_SORTED_BY'); ?> </span>,
|
||||
<span id="filteredBy"><?php echo Text::_('JGLOBAL_FILTERED_BY'); ?></span>
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_ASSET_TITLE', 'a.title', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_ASSET_NAME', 'a.name', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<?php foreach ($actions as $key => $action) : ?>
|
||||
<th scope="col" class="w-6 text-center">
|
||||
<?php echo Text::_($action[1]); ?>
|
||||
</th>
|
||||
<?php endforeach; ?>
|
||||
<th scope="col" class="w-6">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_LFT', 'a.lft', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-3">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($this->items as $i => $item) : ?>
|
||||
<tr class="row0">
|
||||
<th scope="row">
|
||||
<?php echo $this->escape(Text::_($item->title)); ?>
|
||||
</th>
|
||||
<td>
|
||||
<?php echo LayoutHelper::render('joomla.html.treeprefix', ['level' => $item->level + 1]) . $this->escape($item->name); ?>
|
||||
</td>
|
||||
<?php foreach ($actions as $action) : ?>
|
||||
<?php
|
||||
$name = $action[0];
|
||||
$check = $item->checks[$name];
|
||||
if ($check === true) :
|
||||
$class = 'text-success icon-check';
|
||||
$button = 'btn-success';
|
||||
$text = Text::_('COM_USERS_DEBUG_EXPLICIT_ALLOW');
|
||||
elseif ($check === false) :
|
||||
$class = 'text-danger icon-times';
|
||||
$button = 'btn-danger';
|
||||
$text = Text::_('COM_USERS_DEBUG_EXPLICIT_DENY');
|
||||
elseif ($check === null) :
|
||||
$class = 'text-danger icon-minus-circle';
|
||||
$button = 'btn-warning';
|
||||
$text = Text::_('COM_USERS_DEBUG_IMPLICIT_DENY');
|
||||
else :
|
||||
$class = '';
|
||||
$button = '';
|
||||
$text = '';
|
||||
endif;
|
||||
?>
|
||||
<td class="text-center">
|
||||
<span class="<?php echo $class; ?>" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"> <?php echo $text; ?></span>
|
||||
</td>
|
||||
<?php endforeach; ?>
|
||||
<td>
|
||||
<?php echo (int) $item->lft; ?>
|
||||
- <?php echo (int) $item->rgt; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo (int) $item->id; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="legend">
|
||||
<span class="text-danger icon-minus-circle" aria-hidden="true"></span> <?php echo Text::_('COM_USERS_DEBUG_IMPLICIT_DENY'); ?>
|
||||
<span class="text-success icon-check" aria-hidden="true"></span> <?php echo Text::_('COM_USERS_DEBUG_EXPLICIT_ALLOW'); ?>
|
||||
<span class="text-danger icon-times" aria-hidden="true"></span> <?php echo Text::_('COM_USERS_DEBUG_EXPLICIT_DENY'); ?>
|
||||
</div>
|
||||
|
||||
<?php // load the pagination. ?>
|
||||
<?php echo $this->pagination->getListFooter(); ?>
|
||||
|
||||
<input type="hidden" name="task" value="">
|
||||
<input type="hidden" name="boxchecked" value="0">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</form>
|
||||
164
administrator/components/com_users/tmpl/debuguser/default.php
Normal file
164
administrator/components/com_users/tmpl/debuguser/default.php
Normal file
@ -0,0 +1,164 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2010 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
$listOrder = $this->escape($this->state->get('list.ordering'));
|
||||
$listDirn = $this->escape($this->state->get('list.direction'));
|
||||
|
||||
$loginActions = [];
|
||||
$actions = [];
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('table.columns');
|
||||
|
||||
?>
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&view=debuguser&user_id=' . (int) $this->state->get('user_id')); ?>" method="post" name="adminForm" id="adminForm">
|
||||
<div id="j-main-container" class="j-main-container">
|
||||
<?php echo LayoutHelper::render('joomla.searchtools.default', ['view' => $this]); ?>
|
||||
<?php if (empty($this->items)) : ?>
|
||||
<div class="alert alert-info">
|
||||
<span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
|
||||
<?php echo Text::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<?php
|
||||
// Split the actions table
|
||||
foreach ($this->actions as $action) :
|
||||
$name = $action[0];
|
||||
if (in_array($name, ['core.login.site', 'core.login.admin', 'core.login.api', 'core.login.offline'])) :
|
||||
$loginActions[] = $action;
|
||||
else :
|
||||
$actions[] = $action;
|
||||
endif;
|
||||
endforeach;
|
||||
?>
|
||||
<div class="d-flex flex-wrap">
|
||||
<?php foreach ($loginActions as $action) :
|
||||
$name = $action[0];
|
||||
$check = $this->items[0]->checks[$name];
|
||||
if ($check === true) :
|
||||
$class = 'text-success icon-check';
|
||||
$button = 'btn-success';
|
||||
$text = Text::_('COM_USERS_DEBUG_EXPLICIT_ALLOW');
|
||||
elseif ($check === false) :
|
||||
$class = 'text-danger icon-times';
|
||||
$button = 'btn-danger';
|
||||
$text = Text::_('COM_USERS_DEBUG_EXPLICIT_DENY');
|
||||
elseif ($check === null) :
|
||||
$class = 'text-danger icon-minus-circle';
|
||||
$button = 'btn-warning';
|
||||
$text = Text::_('COM_USERS_DEBUG_IMPLICIT_DENY');
|
||||
endif;
|
||||
?>
|
||||
<div class="d-inline p-2">
|
||||
<?php echo Text::_($action[1]); ?>
|
||||
<span class="<?php echo $class; ?>" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"><?php echo Text::_($text); ?></span>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<table class="table">
|
||||
<caption class="visually-hidden">
|
||||
<?php echo Text::_('COM_USERS_DEBUG_USER_TABLE_CAPTION'); ?>,
|
||||
<span id="orderedBy"><?php echo Text::_('JGLOBAL_SORTED_BY'); ?> </span>,
|
||||
<span id="filteredBy"><?php echo Text::_('JGLOBAL_FILTERED_BY'); ?></span>
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_ASSET_TITLE', 'a.title', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_ASSET_NAME', 'a.name', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<?php foreach ($actions as $key => $action) : ?>
|
||||
<th scope="col" class="w-6 text-center">
|
||||
<?php echo Text::_($action[1]); ?>
|
||||
</th>
|
||||
<?php endforeach; ?>
|
||||
<th scope="col" class="w-6">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_LFT', 'a.lft', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-3">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($this->items as $i => $item) :?>
|
||||
<tr class="row0" scope="row">
|
||||
<td>
|
||||
<?php echo $this->escape(Text::_($item->title)); ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo LayoutHelper::render('joomla.html.treeprefix', ['level' => $item->level + 1]) . $this->escape($item->name); ?>
|
||||
</td>
|
||||
<?php foreach ($actions as $action) : ?>
|
||||
<?php
|
||||
$name = $action[0];
|
||||
$check = $item->checks[$name];
|
||||
if ($check === true) :
|
||||
$class = 'text-success icon-check';
|
||||
$button = 'btn-success';
|
||||
$text = Text::_('COM_USERS_DEBUG_EXPLICIT_ALLOW');
|
||||
elseif ($check === false) :
|
||||
$class = 'text-danger icon-times';
|
||||
$button = 'btn-danger';
|
||||
$text = Text::_('COM_USERS_DEBUG_EXPLICIT_DENY');
|
||||
elseif ($check === null) :
|
||||
$class = 'text-danger icon-minus-circle';
|
||||
$button = 'btn-warning';
|
||||
$text = Text::_('COM_USERS_DEBUG_IMPLICIT_DENY');
|
||||
else :
|
||||
$class = '';
|
||||
$button = '';
|
||||
$text = '';
|
||||
endif;
|
||||
?>
|
||||
<td class="text-center">
|
||||
<span class="<?php echo $class; ?>" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"> <?php echo $text; ?></span>
|
||||
</td>
|
||||
<?php endforeach; ?>
|
||||
<td>
|
||||
<?php echo (int) $item->lft; ?>
|
||||
- <?php echo (int) $item->rgt; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo (int) $item->id; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="legend">
|
||||
<span class="text-danger icon-minus-circle" aria-hidden="true"></span> <?php echo Text::_('COM_USERS_DEBUG_IMPLICIT_DENY'); ?>
|
||||
<span class="text-success icon-check" aria-hidden="true"></span> <?php echo Text::_('COM_USERS_DEBUG_EXPLICIT_ALLOW'); ?>
|
||||
<span class="text-danger icon-times" aria-hidden="true"> </span><?php echo Text::_('COM_USERS_DEBUG_EXPLICIT_DENY'); ?>
|
||||
</div>
|
||||
|
||||
<?php // load the pagination. ?>
|
||||
<?php echo $this->pagination->getListFooter(); ?>
|
||||
|
||||
<input type="hidden" name="task" value="">
|
||||
<input type="hidden" name="boxchecked" value="0">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</form>
|
||||
40
administrator/components/com_users/tmpl/group/edit.php
Normal file
40
administrator/components/com_users/tmpl/group/edit.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('keepalive')
|
||||
->useScript('form.validate');
|
||||
|
||||
$this->useCoreUI = true;
|
||||
?>
|
||||
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="group-form" aria-label="<?php echo Text::_('COM_USERS_GROUP_FORM_' . ((int) $this->item->id === 0 ? 'NEW' : 'EDIT'), true); ?>" class="main-card form-validate">
|
||||
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', ['active' => 'details', 'recall' => true, 'breakpoint' => 768]); ?>
|
||||
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'details', Text::_('COM_USERS_USERGROUP_DETAILS')); ?>
|
||||
<div class="form-grid">
|
||||
<?php echo $this->form->renderField('title'); ?>
|
||||
<?php echo $this->form->renderField('parent_id'); ?>
|
||||
</div>
|
||||
<?php echo HTMLHelper::_('uitab.endTab'); ?>
|
||||
<?php $this->ignore_fieldsets = ['group_details']; ?>
|
||||
<?php echo LayoutHelper::render('joomla.edit.params', $this); ?>
|
||||
<?php echo HTMLHelper::_('uitab.endTabSet'); ?>
|
||||
|
||||
<input type="hidden" name="task" value="">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</form>
|
||||
8
administrator/components/com_users/tmpl/group/edit.xml
Normal file
8
administrator/components/com_users/tmpl/group/edit.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<layout title="COM_USERS_GROUP_VIEW_EDIT_TITLE">
|
||||
<message>
|
||||
<![CDATA[COM_USERS_GROUP_VIEW_EDIT_DESC]]>
|
||||
</message>
|
||||
</layout>
|
||||
</metadata>
|
||||
144
administrator/components/com_users/tmpl/groups/default.php
Normal file
144
administrator/components/com_users/tmpl/groups/default.php
Normal file
@ -0,0 +1,144 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Access\Access;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
$user = $this->getCurrentUser();
|
||||
$listOrder = $this->escape($this->state->get('list.ordering'));
|
||||
$listDirn = $this->escape($this->state->get('list.direction'));
|
||||
|
||||
Text::script('COM_USERS_GROUPS_CONFIRM_DELETE', true);
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('com_users.admin-users-groups')
|
||||
->useScript('multiselect')
|
||||
->useScript('table.columns');
|
||||
|
||||
?>
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&view=groups'); ?>" method="post" name="adminForm" id="adminForm">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="j-main-container" class="j-main-container">
|
||||
<?php echo LayoutHelper::render('joomla.searchtools.default', ['view' => $this, 'options' => ['filterButton' => false]]); ?>
|
||||
<?php if (empty($this->items)) : ?>
|
||||
<div class="alert alert-info">
|
||||
<span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
|
||||
<?php echo Text::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<table class="table" id="groupList">
|
||||
<caption class="visually-hidden">
|
||||
<?php echo Text::_('COM_USERS_GROUPS_TABLE_CAPTION'); ?>,
|
||||
<span id="orderedBy"><?php echo Text::_('JGLOBAL_SORTED_BY'); ?> </span>,
|
||||
<span id="filteredBy"><?php echo Text::_('JGLOBAL_FILTERED_BY'); ?></span>
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="w-1 text-center">
|
||||
<?php echo HTMLHelper::_('grid.checkall'); ?>
|
||||
</td>
|
||||
<th scope="col">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_GROUP_TITLE', 'a.title', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-10 text-center">
|
||||
<?php echo Text::_('COM_USERS_DEBUG_PERMISSIONS'); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-10 text-center d-none d-md-table-cell">
|
||||
<span class="icon-check" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_USERS_COUNT_ENABLED_USERS'); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-10 text-center d-none d-md-table-cell">
|
||||
<span class="icon-times" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_USERS_COUNT_DISABLED_USERS'); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-5 d-none d-md-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($this->items as $i => $item) :
|
||||
$canCreate = $user->authorise('core.create', 'com_users');
|
||||
$canEdit = $user->authorise('core.edit', 'com_users');
|
||||
|
||||
// If this group is super admin and this user is not super admin, $canEdit is false
|
||||
if (!$user->authorise('core.admin') && Access::checkGroup($item->id, 'core.admin')) {
|
||||
$canEdit = false;
|
||||
}
|
||||
$canChange = $user->authorise('core.edit.state', 'com_users');
|
||||
?>
|
||||
<tr class="row<?php echo $i % 2; ?>">
|
||||
<td class="text-center" data-usercount="<?php echo $item->user_count; ?>">
|
||||
<?php if ($canEdit) : ?>
|
||||
<?php echo HTMLHelper::_('grid.id', $i, $item->id, false, 'cid', 'cb', $item->title); ?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<th scope="row">
|
||||
<?php echo LayoutHelper::render('joomla.html.treeprefix', ['level' => $item->level + 1]); ?>
|
||||
<?php if ($canEdit) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_users&task=group.edit&id=' . $item->id); ?>" title="<?php echo Text::_('JACTION_EDIT'); ?> <?php echo $this->escape($item->title); ?>">
|
||||
<?php echo $this->escape($item->title); ?></a>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($item->title); ?>
|
||||
<?php endif; ?>
|
||||
</th>
|
||||
<td class="text-center btns">
|
||||
<a href="<?php echo Route::_('index.php?option=com_users&view=debuggroup&group_id=' . (int) $item->id); ?>">
|
||||
<span class="icon-list" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"><?php echo Text::_('COM_USERS_DEBUG_PERMISSIONS'); ?></span>
|
||||
</a>
|
||||
</td>
|
||||
<td class="text-center btns itemnumber d-none d-md-table-cell">
|
||||
<a class="btn <?php echo $item->count_enabled > 0 ? 'btn-success' : 'btn-secondary'; ?>"
|
||||
href="<?php echo Route::_('index.php?option=com_users&view=users&filter[group_id]=' . (int) $item->id . '&filter[state]=0'); ?>"
|
||||
aria-describedby="tip-enabled<?php echo $i; ?>">
|
||||
<?php echo $item->count_enabled; ?>
|
||||
</a>
|
||||
<div role="tooltip" id="tip-enabled<?php echo $i; ?>">
|
||||
<?php echo Text::_('COM_USERS_COUNT_ENABLED_USERS'); ?>
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-center btns itemnumber d-none d-md-table-cell">
|
||||
<a class="btn <?php echo $item->count_disabled > 0 ? 'btn-danger' : 'btn-secondary'; ?>"
|
||||
href="<?php echo Route::_('index.php?option=com_users&view=users&filter[group_id]=' . (int) $item->id . '&filter[state]=1'); ?>"
|
||||
aria-describedby="tip-blocked<?php echo $i; ?>">
|
||||
<?php echo $item->count_disabled; ?>
|
||||
</a>
|
||||
<div role="tooltip" id="tip-blocked<?php echo $i; ?>">
|
||||
<?php echo Text::_('COM_USERS_COUNT_DISABLED_USERS'); ?>
|
||||
</div>
|
||||
</td>
|
||||
<td class="d-none d-md-table-cell">
|
||||
<?php echo (int) $item->id; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php // load the pagination. ?>
|
||||
<?php echo $this->pagination->getListFooter(); ?>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<input type="hidden" name="task" value="">
|
||||
<input type="hidden" name="boxchecked" value="0">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<layout title="COM_USERS_GROUPS_VIEW_DEFAULT_TITLE">
|
||||
<message>
|
||||
<![CDATA[COM_USERS_GROUPS_VIEW_DEFAULT_DESC]]>
|
||||
</message>
|
||||
</layout>
|
||||
</metadata>
|
||||
54
administrator/components/com_users/tmpl/level/edit.php
Normal file
54
administrator/components/com_users/tmpl/level/edit.php
Normal file
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('keepalive')
|
||||
->useScript('form.validate');
|
||||
|
||||
?>
|
||||
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="level-form" aria-label="<?php echo Text::_('COM_USERS_LEVEL_FORM_' . ((int) $this->item->id === 0 ? 'NEW' : 'EDIT'), true); ?>" class="form-validate main-card">
|
||||
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', ['active' => 'details', 'recall' => true, 'breakpoint' => 768]); ?>
|
||||
|
||||
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'details', Text::_('COM_USERS_LEVEL_DETAILS')); ?>
|
||||
<fieldset class="options-form">
|
||||
<legend><?php echo Text::_('COM_USERS_LEVEL_DETAILS'); ?></legend>
|
||||
<div class="control-group">
|
||||
<div class="control-label">
|
||||
<?php echo $this->form->getLabel('title'); ?>
|
||||
</div>
|
||||
<div class="controls">
|
||||
<?php echo $this->form->getInput('title'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<?php echo HTMLHelper::_('uitab.endTab'); ?>
|
||||
|
||||
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'groups', Text::_('COM_USERS_USER_GROUPS_HAVING_ACCESS')); ?>
|
||||
<fieldset class="options-form">
|
||||
<legend><?php echo Text::_('COM_USERS_USER_GROUPS_HAVING_ACCESS'); ?></legend>
|
||||
<div>
|
||||
<?php echo HTMLHelper::_('access.usergroups', 'jform[rules]', $this->item->rules, true); ?>
|
||||
</div>
|
||||
</fieldset>
|
||||
<?php echo HTMLHelper::_('uitab.endTab'); ?>
|
||||
|
||||
<?php echo HTMLHelper::_('uitab.endTabSet'); ?>
|
||||
|
||||
<input type="hidden" name="task" value="">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</form>
|
||||
8
administrator/components/com_users/tmpl/level/edit.xml
Normal file
8
administrator/components/com_users/tmpl/level/edit.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<layout title="COM_USERS_LEVEL_VIEW_EDIT_TITLE">
|
||||
<message>
|
||||
<![CDATA[COM_USERS_LEVEL_VIEW_EDIT_DESC]]>
|
||||
</message>
|
||||
</layout>
|
||||
</metadata>
|
||||
143
administrator/components/com_users/tmpl/levels/default.php
Normal file
143
administrator/components/com_users/tmpl/levels/default.php
Normal file
@ -0,0 +1,143 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Access\Access;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\CMS\Session\Session;
|
||||
use Joomla\Component\Users\Administrator\Helper\UsersHelper;
|
||||
|
||||
/** @var \Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('table.columns')
|
||||
->useScript('multiselect');
|
||||
|
||||
$user = $this->getCurrentUser();
|
||||
$listOrder = $this->escape($this->state->get('list.ordering'));
|
||||
$listDirn = $this->escape($this->state->get('list.direction'));
|
||||
$saveOrder = $listOrder == 'a.ordering';
|
||||
|
||||
if ($saveOrder && !empty($this->items)) {
|
||||
$saveOrderingUrl = 'index.php?option=com_users&task=levels.saveOrderAjax&tmpl=component&' . Session::getFormToken() . '=1';
|
||||
HTMLHelper::_('draggablelist.draggable');
|
||||
}
|
||||
?>
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&view=levels'); ?>" method="post" id="adminForm" name="adminForm">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="j-main-container" class="j-main-container">
|
||||
<?php echo LayoutHelper::render('joomla.searchtools.default', ['view' => $this, 'options' => ['filterButton' => false]]); ?>
|
||||
|
||||
<?php if (empty($this->items)) : ?>
|
||||
<div class="alert alert-info">
|
||||
<span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
|
||||
<?php echo Text::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<table class="table" id="levelList">
|
||||
<caption class="visually-hidden">
|
||||
<?php echo Text::_('COM_USERS_LEVELS_TABLE_CAPTION'); ?>,
|
||||
<span id="orderedBy"><?php echo Text::_('JGLOBAL_SORTED_BY'); ?> </span>,
|
||||
<span id="filteredBy"><?php echo Text::_('JGLOBAL_FILTERED_BY'); ?></span>
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="w-1 text-center">
|
||||
<?php echo HTMLHelper::_('grid.checkall'); ?>
|
||||
</td>
|
||||
<th scope="col" class="w-1 text-center d-none d-md-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', '', 'a.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING', 'icon-sort'); ?>
|
||||
</th>
|
||||
<th scope="col">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_LEVEL_NAME', 'a.title', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="d-none d-md-table-cell">
|
||||
<?php echo Text::_('COM_USERS_USER_GROUPS_HAVING_ACCESS'); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-1 d-none d-md-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody<?php if ($saveOrder) :
|
||||
?> class="js-draggable" data-url="<?php echo $saveOrderingUrl; ?>" data-direction="<?php echo strtolower($listDirn); ?>"<?php
|
||||
endif; ?>>
|
||||
<?php $count = count($this->items); ?>
|
||||
<?php foreach ($this->items as $i => $item) :
|
||||
$ordering = ($listOrder == 'a.ordering');
|
||||
$canCreate = $user->authorise('core.create', 'com_users');
|
||||
$canEdit = $user->authorise('core.edit', 'com_users');
|
||||
$canChange = $user->authorise('core.edit.state', 'com_users');
|
||||
|
||||
// Decode level groups
|
||||
$groups = json_decode($item->rules);
|
||||
|
||||
// If this group is super admin and this user is not super admin, $canEdit is false
|
||||
if (!$this->getCurrentUser()->authorise('core.admin') && $groups && Access::checkGroup($groups[0], 'core.admin')) {
|
||||
$canEdit = false;
|
||||
$canChange = false;
|
||||
}
|
||||
?>
|
||||
<tr class="row<?php echo $i % 2; ?>">
|
||||
<td class="text-center">
|
||||
<?php if ($canEdit) : ?>
|
||||
<?php echo HTMLHelper::_('grid.id', $i, $item->id, false, 'cid', 'cb', $item->title); ?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td class="text-center d-none d-md-table-cell">
|
||||
<?php
|
||||
$iconClass = '';
|
||||
if (!$canChange) {
|
||||
$iconClass = ' inactive';
|
||||
} elseif (!$saveOrder) {
|
||||
$iconClass = ' inactive" title="' . Text::_('JORDERINGDISABLED');
|
||||
}
|
||||
?>
|
||||
<span class="sortable-handler<?php echo $iconClass ?>">
|
||||
<span class="icon-ellipsis-v" aria-hidden="true"></span>
|
||||
</span>
|
||||
<?php if ($canChange && $saveOrder) : ?>
|
||||
<input type="text" name="order[]" size="5" value="<?php echo $item->ordering; ?>" class="width-20 text-area-order hidden">
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<th scope="row">
|
||||
<?php if ($canEdit) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_users&task=level.edit&id=' . $item->id); ?>" title="<?php echo Text::_('JACTION_EDIT'); ?> <?php echo $this->escape($item->title); ?>">
|
||||
<?php echo $this->escape($item->title); ?></a>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($item->title); ?>
|
||||
<?php endif; ?>
|
||||
</th>
|
||||
<td class="d-none d-md-table-cell">
|
||||
<?php echo UsersHelper::getVisibleByGroups($item->rules); ?>
|
||||
</td>
|
||||
<td class="d-none d-md-table-cell">
|
||||
<?php echo (int) $item->id; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php // load the pagination. ?>
|
||||
<?php echo $this->pagination->getListFooter(); ?>
|
||||
|
||||
<?php endif; ?>
|
||||
<input type="hidden" name="task" value="">
|
||||
<input type="hidden" name="boxchecked" value="0">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<layout title="COM_USERS_LEVELS_VIEW_DEFAULT_TITLE">
|
||||
<message>
|
||||
<![CDATA[COM_USERS_LEVELS_VIEW_DEFAULT_DESC]]>
|
||||
</message>
|
||||
</layout>
|
||||
</metadata>
|
||||
62
administrator/components/com_users/tmpl/mail/default.php
Normal file
62
administrator/components/com_users/tmpl/mail/default.php
Normal file
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Component\ComponentHelper;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
/** @var Joomla\Component\Users\Administrator\View\Mail\HtmlView $this */
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('keepalive')
|
||||
->useScript('form.validate');
|
||||
|
||||
$comUserParams = ComponentHelper::getParams('com_users');
|
||||
?>
|
||||
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&view=mail'); ?>" name="adminForm" method="post" id="mail-form" aria-label="<?php echo Text::_('COM_USERS_MASSMAIL_FORM_NEW'); ?>" class="main-card p-4 form-validate">
|
||||
<div class="row">
|
||||
<div class="col-lg-9">
|
||||
<div class="control-group">
|
||||
<?php echo $this->form->getLabel('subject'); ?>
|
||||
<span class="input-group">
|
||||
<?php if (!empty($comUserParams->get('mailSubjectPrefix'))) : ?>
|
||||
<span class="input-group-text"><?php echo $comUserParams->get('mailSubjectPrefix'); ?></span>
|
||||
<?php endif; ?>
|
||||
<?php echo $this->form->getInput('subject'); ?>
|
||||
</span>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<?php echo $this->form->getLabel('message'); ?>
|
||||
<?php echo $this->form->getInput('message'); ?>
|
||||
<?php if (!empty($comUserParams->get('mailBodySuffix'))) : ?>
|
||||
<div class="mt-1 card">
|
||||
<div class="card-body">
|
||||
<?php echo $comUserParams->get('mailBodySuffix'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3">
|
||||
<?php echo $this->form->renderField('recurse'); ?>
|
||||
<?php echo $this->form->renderField('mode'); ?>
|
||||
<?php echo $this->form->renderField('disabled'); ?>
|
||||
<?php echo $this->form->renderField('bcc'); ?>
|
||||
<?php echo $this->form->renderField('group'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<input type="hidden" name="task" value="">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</form>
|
||||
8
administrator/components/com_users/tmpl/mail/default.xml
Normal file
8
administrator/components/com_users/tmpl/mail/default.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<layout title="COM_USERS_MAIL_VIEW_DEFAULT_TITLE">
|
||||
<message>
|
||||
<![CDATA[COM_USERS_MAIL_VIEW_DEFAULT_DESC]]>
|
||||
</message>
|
||||
</layout>
|
||||
</metadata>
|
||||
@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2022 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
// Prevent direct access
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\Component\Users\Administrator\View\Method\HtmlView;
|
||||
|
||||
/** @var HtmlView $this */
|
||||
|
||||
HTMLHelper::_('bootstrap.tooltip', '.hasTooltip');
|
||||
|
||||
$cancelURL = Route::_('index.php?option=com_users&task=methods.display&user_id=' . $this->user->id);
|
||||
|
||||
if (!empty($this->returnURL)) {
|
||||
$cancelURL = $this->escape(base64_decode($this->returnURL));
|
||||
}
|
||||
|
||||
if ($this->record->method != 'backupcodes') {
|
||||
throw new RuntimeException(Text::_('JERROR_ALERTNOAUTHOR'), 403);
|
||||
}
|
||||
|
||||
?>
|
||||
<h2>
|
||||
<?php echo Text::_('COM_USERS_USER_BACKUPCODES') ?>
|
||||
</h2>
|
||||
|
||||
<p class="text-muted">
|
||||
<?php echo Text::_('COM_USERS_USER_BACKUPCODES_DESC') ?>
|
||||
</p>
|
||||
|
||||
<table class="table table-striped">
|
||||
<?php for ($i = 0; $i < (count($this->backupCodes) / 2); $i++) : ?>
|
||||
<tr>
|
||||
<td>
|
||||
<?php if (!empty($this->backupCodes[2 * $i])) : ?>
|
||||
<?php // This is a Key emoji; we can hide it from screen readers ?>
|
||||
<span aria-hidden="true">🔑</span>
|
||||
<?php echo $this->backupCodes[2 * $i] ?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php if (!empty($this->backupCodes[1 + 2 * $i])) : ?>
|
||||
<?php // This is a Key emoji; we can hide it from screen readers ?>
|
||||
<span aria-hidden="true">🔑</span>
|
||||
<?php echo $this->backupCodes[1 + 2 * $i] ?>
|
||||
<?php endif ;?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endfor; ?>
|
||||
</table>
|
||||
|
||||
<div class="alert alert-info">
|
||||
<span class="icon-info-circle" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_USERS_MFA_BACKUPCODES_RESET_INFO'); ?>
|
||||
</div>
|
||||
|
||||
<div class="d-sm-none">
|
||||
<a class="btn btn-danger" href="<?php echo Route::_(sprintf("index.php?option=com_users&task=method.regenerateBackupCodes&user_id=%s&%s=1%s", $this->user->id, Factory::getApplication()->getFormToken(), empty($this->returnURL) ? '' : '&returnurl=' . $this->returnURL)) ?>">
|
||||
<span class="icon icon-refresh" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_USERS_MFA_BACKUPCODES_RESET'); ?>
|
||||
</a>
|
||||
|
||||
<a href="<?php echo $cancelURL ?>"
|
||||
class="btn btn-secondary">
|
||||
<span class="icon icon-cancel-2 icon-ban-circle"></span>
|
||||
<?php echo Text::_('JCANCEL'); ?>
|
||||
</a>
|
||||
</div>
|
||||
185
administrator/components/com_users/tmpl/method/edit.php
Normal file
185
administrator/components/com_users/tmpl/method/edit.php
Normal file
@ -0,0 +1,185 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2022 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
// Prevent direct access
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\Component\Users\Administrator\View\Method\HtmlView;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
|
||||
/** @var HtmlView $this */
|
||||
|
||||
$cancelURL = Route::_('index.php?option=com_users&task=methods.display&user_id=' . $this->user->id);
|
||||
|
||||
if (!empty($this->returnURL)) {
|
||||
$cancelURL = $this->escape(base64_decode($this->returnURL));
|
||||
}
|
||||
|
||||
$recordId = (int) $this->record->id ?? 0;
|
||||
$method = $this->record->method ?? $this->getModel()->getState('method');
|
||||
$userId = (int) $this->user->id ?? 0;
|
||||
$headingLevel = 2;
|
||||
$hideSubmit = !$this->renderOptions['show_submit'] && !$this->isEditExisting
|
||||
?>
|
||||
<div class="card card-body">
|
||||
<form action="<?php echo Route::_(sprintf("index.php?option=com_users&task=method.save&id=%d&method=%s&user_id=%d", $recordId, $method, $userId)) ?>"
|
||||
class="form form-horizontal" id="com-users-method-edit" method="post">
|
||||
<?php echo HTMLHelper::_('form.token') ?>
|
||||
<?php if (!empty($this->returnURL)) : ?>
|
||||
<input type="hidden" name="returnurl" value="<?php echo $this->escape($this->returnURL) ?>">
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($this->renderOptions['hidden_data'])) : ?>
|
||||
<?php foreach ($this->renderOptions['hidden_data'] as $key => $value) : ?>
|
||||
<input type="hidden" name="<?php echo $this->escape($key) ?>" value="<?php echo $this->escape($value) ?>">
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($this->title)) : ?>
|
||||
<?php if (!empty($this->renderOptions['help_url'])) : ?>
|
||||
<span class="float-end">
|
||||
<a href="<?php echo $this->renderOptions['help_url'] ?>"
|
||||
class="btn btn-sm btn-dark"
|
||||
target="_blank"
|
||||
>
|
||||
<span class="icon icon-question-sign" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"><?php echo Text::_('JHELP') ?></span>
|
||||
</a>
|
||||
</span>
|
||||
<?php endif;?>
|
||||
<h<?php echo $headingLevel ?> id="com-users-method-edit-head">
|
||||
<?php echo Text::_($this->title) ?>
|
||||
</h<?php echo $headingLevel ?>>
|
||||
<?php $headingLevel++ ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="row">
|
||||
<label class="col-sm-3 col-form-label"
|
||||
for="com-users-method-edit-title">
|
||||
<?php echo Text::_('COM_USERS_MFA_EDIT_FIELD_TITLE'); ?>
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text"
|
||||
class="form-control"
|
||||
id="com-users-method-edit-title"
|
||||
name="title"
|
||||
value="<?php echo $this->escape($this->record->title) ?>"
|
||||
aria-describedby="com-users-method-edit-help">
|
||||
<p class="form-text" id="com-users-method-edit-help">
|
||||
<?php echo $this->escape(Text::_('COM_USERS_MFA_EDIT_FIELD_TITLE_DESC')) ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-9 offset-sm-3">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" id="com-users-is-default-method" <?php echo $this->record->default ? 'checked="checked"' : ''; ?> name="default">
|
||||
<label class="form-check-label" for="com-users-is-default-method">
|
||||
<?php echo Text::_('COM_USERS_MFA_EDIT_FIELD_DEFAULT'); ?>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($this->renderOptions['pre_message'])) : ?>
|
||||
<div class="com-users-method-edit-pre-message text-muted mt-4 mb-3">
|
||||
<?php echo $this->renderOptions['pre_message'] ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($this->renderOptions['tabular_data'])) : ?>
|
||||
<div class="com-users-method-edit-tabular-container">
|
||||
<?php if (!empty($this->renderOptions['table_heading'])) : ?>
|
||||
<h<?php echo $headingLevel ?> class="h3 border-bottom mb-3">
|
||||
<?php echo $this->renderOptions['table_heading'] ?>
|
||||
</h<?php echo $headingLevel ?>>
|
||||
<?php endif; ?>
|
||||
<table class="table table-striped">
|
||||
<tbody>
|
||||
<?php foreach ($this->renderOptions['tabular_data'] as $cell1 => $cell2) : ?>
|
||||
<tr>
|
||||
<td>
|
||||
<?php echo $cell1 ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo $cell2 ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($this->renderOptions['field_type'] == 'custom') : ?>
|
||||
<?php echo $this->renderOptions['html']; ?>
|
||||
<?php endif; ?>
|
||||
<div class="row mb-3 <?php echo $this->renderOptions['input_type'] === 'hidden' ? 'd-none' : '' ?>">
|
||||
<?php if ($this->renderOptions['label']) : ?>
|
||||
<label class="col-sm-3 col-form-label" for="com-users-method-code">
|
||||
<?php echo $this->renderOptions['label']; ?>
|
||||
</label>
|
||||
<?php endif; ?>
|
||||
<div class="col-sm-9" <?php echo $this->renderOptions['label'] ? '' : 'offset-sm-3' ?>>
|
||||
<?php
|
||||
$attributes = array_merge(
|
||||
[
|
||||
'type' => $this->renderOptions['input_type'],
|
||||
'name' => 'code',
|
||||
'value' => $this->escape($this->renderOptions['input_value']),
|
||||
'id' => 'com-users-method-code',
|
||||
'class' => 'form-control',
|
||||
'aria-describedby' => 'com-users-method-code-help',
|
||||
],
|
||||
$this->renderOptions['input_attributes']
|
||||
);
|
||||
|
||||
if (strpos($attributes['class'], 'form-control') === false) {
|
||||
$attributes['class'] .= ' form-control';
|
||||
}
|
||||
?>
|
||||
<input <?php echo ArrayHelper::toString($attributes) ?>>
|
||||
<p class="form-text" id="com-users-method-code-help">
|
||||
<?php echo $this->escape($this->renderOptions['placeholder']) ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container d-sm-none">
|
||||
<div class="row mb-3">
|
||||
<div class="col-sm-9 offset-sm-3">
|
||||
<button type="submit"
|
||||
id="user-mfa-edit-save"
|
||||
class="btn btn-primary me-3 <?php echo $hideSubmit ? 'd-none' : '' ?> <?php echo $this->renderOptions['submit_class'] ?>">
|
||||
<span class="<?php echo $this->renderOptions['submit_icon'] ?>" aria-hidden="true"></span>
|
||||
<?php echo Text::_($this->renderOptions['submit_text']); ?>
|
||||
</button>
|
||||
|
||||
<a href="<?php echo $cancelURL ?>"
|
||||
id="user-mfa-edit-cancel"
|
||||
class="btn btn-sm btn-danger">
|
||||
<span class="icon icon-cancel-2" aria-hidden="true"></span>
|
||||
<?php echo Text::_('JCANCEL'); ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($this->renderOptions['post_message'])) : ?>
|
||||
<div class="com-users-method-edit-post-message text-muted">
|
||||
<?php echo $this->renderOptions['post_message'] ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</form>
|
||||
</div>
|
||||
54
administrator/components/com_users/tmpl/methods/default.php
Normal file
54
administrator/components/com_users/tmpl/methods/default.php
Normal file
@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2022 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
// Prevent direct access
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\Component\Users\Administrator\View\Methods\HtmlView;
|
||||
|
||||
/** @var HtmlView $this */
|
||||
?>
|
||||
<div id="com-users-methods-list">
|
||||
<div id="com-users-methods-reset-container" class="d-flex align-items-center border border-1 rounded-3 p-2">
|
||||
<div id="com-users-methods-reset-message" class="flex-grow-1">
|
||||
<?php echo Text::_('COM_USERS_MFA_LIST_STATUS_' . ($this->mfaActive ? 'ON' : 'OFF')) ?>
|
||||
</div>
|
||||
<?php if ($this->mfaActive) : ?>
|
||||
<div>
|
||||
<a href="<?php echo Route::_('index.php?option=com_users&task=methods.disable&' . Factory::getApplication()->getFormToken() . '=1' . ($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') . '&user_id=' . $this->user->id) ?>"
|
||||
class="btn btn-danger btn-sm">
|
||||
<?php echo Text::_('COM_USERS_MFA_LIST_REMOVEALL'); ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if (!count($this->methods)) : ?>
|
||||
<div id="com-users-methods-list-instructions" class="alert alert-info mt-2">
|
||||
<span class="icon icon-info-circle" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_USERS_MFA_LIST_INSTRUCTIONS'); ?>
|
||||
</div>
|
||||
<?php elseif ($this->isMandatoryMFASetup) : ?>
|
||||
<div class="alert alert-info my-3">
|
||||
<h3 class="alert-heading">
|
||||
<?php echo Text::_('COM_USERS_MFA_MANDATORY_NOTICE_HEAD') ?>
|
||||
</h3>
|
||||
<p>
|
||||
<?php echo Text::_('COM_USERS_MFA_MANDATORY_NOTICE_BODY') ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
|
||||
<?php $this->setLayout('list');
|
||||
echo $this->loadTemplate(); ?>
|
||||
</div>
|
||||
@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2022 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
// Prevent direct access
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\Component\Users\Administrator\View\Methods\HtmlView;
|
||||
|
||||
/** @var HtmlView $this */
|
||||
|
||||
$headingLevel = 2;
|
||||
?>
|
||||
<div id="com-users-methods-list">
|
||||
<?php if (!$this->isAdmin) : ?>
|
||||
<h<?php echo $headingLevel ?> id="com-users-methods-list-head">
|
||||
<?php echo Text::_('COM_USERS_MFA_FIRSTTIME_PAGE_HEAD'); ?>
|
||||
</h<?php echo $headingLevel++ ?>>
|
||||
<?php endif; ?>
|
||||
<div id="com-users-methods-list-instructions" class="alert alert-info">
|
||||
<h<?php echo $headingLevel ?> class="alert-heading">
|
||||
<span class="fa fa-shield-alt" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_USERS_MFA_FIRSTTIME_INSTRUCTIONS_HEAD'); ?>
|
||||
</h<?php echo $headingLevel ?>>
|
||||
<p>
|
||||
<?php echo Text::_('COM_USERS_MFA_FIRSTTIME_INSTRUCTIONS_WHATITDOES'); ?>
|
||||
</p>
|
||||
<a href="<?php echo Route::_(
|
||||
'index.php?option=com_users&task=methods.doNotShowThisAgain' .
|
||||
($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') .
|
||||
'&user_id=' . $this->user->id .
|
||||
'&' . Factory::getApplication()->getFormToken() . '=1'
|
||||
)?>"
|
||||
class="btn btn-danger w-100">
|
||||
<?php echo Text::_('COM_USERS_MFA_FIRSTTIME_NOTINTERESTED'); ?>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<?php $this->setLayout('list');
|
||||
echo $this->loadTemplate(); ?>
|
||||
</div>
|
||||
144
administrator/components/com_users/tmpl/methods/list.php
Normal file
144
administrator/components/com_users/tmpl/methods/list.php
Normal file
@ -0,0 +1,144 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2022 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
// Prevent direct access
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
use Joomla\Component\Users\Administrator\Helper\Mfa as MfaHelper;
|
||||
use Joomla\Component\Users\Administrator\Model\MethodsModel;
|
||||
use Joomla\Component\Users\Administrator\View\Methods\HtmlView;
|
||||
|
||||
/** @var HtmlView $this */
|
||||
|
||||
HTMLHelper::_('bootstrap.tooltip', '.hasTooltip');
|
||||
|
||||
/** @var MethodsModel $model */
|
||||
$model = $this->getModel();
|
||||
|
||||
$this->document->getWebAssetManager()->useScript('com_users.two-factor-list');
|
||||
|
||||
$canAddEdit = MfaHelper::canAddEditMethod($this->user);
|
||||
$canDelete = MfaHelper::canDeleteMethod($this->user);
|
||||
?>
|
||||
<div id="com-users-methods-list-container">
|
||||
<?php foreach ($this->methods as $methodName => $method) :
|
||||
$methodClass = 'com-users-methods-list-method-name-' . htmlentities($method['name'])
|
||||
. ($this->defaultMethod == $methodName ? ' com-users-methods-list-method-default' : '');
|
||||
?>
|
||||
<div class="com-users-methods-list-method <?php echo $methodClass?> <?php echo count($method['active']) ? 'com-users-methods-list-method-active' : '' ?>">
|
||||
<div class="com-users-methods-list-method-header">
|
||||
<div class="com-users-methods-list-method-image">
|
||||
<img src="<?php echo Uri::root() . $method['image'] ?>"
|
||||
alt="<?php echo $this->escape($method['display']) ?>"
|
||||
class="img-fluid"
|
||||
>
|
||||
</div>
|
||||
<div class="com-users-methods-list-method-title">
|
||||
<h3>
|
||||
<span class="me-1 flex-grow-1">
|
||||
<?php echo $method['display'] ?>
|
||||
</span>
|
||||
<?php if ($this->defaultMethod == $methodName) : ?>
|
||||
<span id="com-users-methods-list-method-default-tag" class="badge bg-info p-2 fs-4 me-1">
|
||||
<?php echo Text::_('COM_USERS_MFA_LIST_DEFAULTTAG') ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="com-users-methods-list-method-records-container">
|
||||
<div class="com-users-methods-list-method-info">
|
||||
<?php echo $method['shortinfo'] ?>
|
||||
</div>
|
||||
|
||||
<?php if (count($method['active'])) : ?>
|
||||
<div class="com-users-methods-list-method-records pt-2 my-2">
|
||||
<?php foreach ($method['active'] as $record) : ?>
|
||||
<div class="com-users-methods-list-method-record d-flex flex-row flex-wrap justify-content-start border-top py-2">
|
||||
<div class="com-users-methods-list-method-record-info flex-grow-1 d-flex flex-column align-items-start gap-1">
|
||||
<?php if ($methodName === 'backupcodes') : ?>
|
||||
<?php if ($canAddEdit) : ?>
|
||||
<div class="alert alert-info mt-1 w-100">
|
||||
<?php echo Text::sprintf('COM_USERS_MFA_BACKUPCODES_PRINT_PROMPT_HEAD', Route::_('index.php?option=com_users&task=method.edit&id=' . (int) $record->id . ($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') . '&user_id=' . $this->user->id)) ?>
|
||||
</div>
|
||||
<?php endif ?>
|
||||
<?php else : ?>
|
||||
<h4 class="com-users-methods-list-method-record-title-container mb-1 fs-3">
|
||||
<?php if ($record->default) : ?>
|
||||
<span id="com-users-methods-list-method-default-badge-small"
|
||||
class="text-warning me-1 hasTooltip"
|
||||
title="<?php echo $this->escape(Text::_('COM_USERS_MFA_LIST_DEFAULTTAG')) ?>">
|
||||
<span class="icon icon-star" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"><?php echo $this->escape(Text::_('COM_USERS_MFA_LIST_DEFAULTTAG')) ?></span>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
<span class="com-users-methods-list-method-record-title fw-bold">
|
||||
<?php echo $this->escape($record->title); ?>
|
||||
</span>
|
||||
</h4>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="com-users-methods-list-method-record-lastused my-1 d-flex flex-row flex-wrap justify-content-start gap-5 text-muted w-100">
|
||||
<span class="com-users-methods-list-method-record-createdon">
|
||||
<?php echo Text::sprintf('COM_USERS_MFA_LBL_CREATEDON', $model->formatRelative($record->created_on)) ?>
|
||||
</span>
|
||||
<span class="com-users-methods-list-method-record-lastused-date">
|
||||
<?php echo Text::sprintf('COM_USERS_MFA_LBL_LASTUSED', $model->formatRelative($record->last_used)) ?>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<?php if ($methodName !== 'backupcodes' && ($canAddEdit || $canDelete)) : ?>
|
||||
<div class="com-users-methods-list-method-record-actions my-2 d-flex flex-row flex-wrap justify-content-center align-content-center align-items-start">
|
||||
<?php if ($canAddEdit) : ?>
|
||||
<a class="com-users-methods-list-method-record-edit btn btn-secondary btn-sm mx-1 hasTooltip"
|
||||
href="<?php echo Route::_('index.php?option=com_users&task=method.edit&id=' . (int) $record->id . ($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') . '&user_id=' . $this->user->id)?>"
|
||||
title="<?php echo Text::_('JACTION_EDIT') ?> <?php echo $this->escape($record->title); ?>">
|
||||
<span class="icon icon-pencil" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"><?php echo Text::_('JACTION_EDIT') ?> <?php echo $this->escape($record->title); ?></span>
|
||||
</a>
|
||||
<?php endif ?>
|
||||
|
||||
<?php if ($method['canDisable'] && $canDelete) : ?>
|
||||
<a class="com-users-methods-list-method-record-delete btn btn-danger btn-sm mx-1 hasTooltip"
|
||||
href="<?php echo Route::_('index.php?option=com_users&task=method.delete&id=' . (int) $record->id . ($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') . '&user_id=' . $this->user->id . '&' . Factory::getApplication()->getFormToken() . '=1')?>"
|
||||
title="<?php echo Text::_('JACTION_DELETE') ?> <?php echo $this->escape($record->title); ?>">
|
||||
<span class="icon icon-trash" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"><?php echo Text::_('JACTION_DELETE') ?> <?php echo $this->escape($record->title); ?></span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($canAddEdit && (empty($method['active']) || $method['allowMultiple'])) : ?>
|
||||
<div class="com-users-methods-list-method-addnew-container border-top pt-2">
|
||||
<a href="<?php echo Route::_('index.php?option=com_users&task=method.add&method=' . $this->escape(urlencode($method['name'])) . ($this->returnURL ? '&returnurl=' . $this->escape(urlencode($this->returnURL)) : '') . '&user_id=' . $this->user->id)?>"
|
||||
class="com-users-methods-list-method-addnew btn btn-primary btn-sm"
|
||||
>
|
||||
<span class="icon-plus-2" aria-hidden="true"></span>
|
||||
<?php echo Text::sprintf('COM_USERS_MFA_ADD_AUTHENTICATOR_OF_TYPE', $method['display']) ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
47
administrator/components/com_users/tmpl/note/edit.php
Normal file
47
administrator/components/com_users/tmpl/note/edit.php
Normal file
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2011 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('keepalive')
|
||||
->useScript('form.validate');
|
||||
|
||||
?>
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&view=note&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="note-form" aria-label="<?php echo Text::_('COM_USERS_NOTE_FORM_' . ((int) $this->item->id === 0 ? 'NEW' : 'EDIT'), true); ?>" class="form-validate">
|
||||
<fieldset class="adminform">
|
||||
<div class="card mt-4">
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="form-grid">
|
||||
<?php echo $this->form->renderField('subject'); ?>
|
||||
<?php echo $this->form->renderField('user_id'); ?>
|
||||
<?php echo $this->form->renderField('catid'); ?>
|
||||
<?php echo $this->form->renderField('state'); ?>
|
||||
<?php echo $this->form->renderField('review_time'); ?>
|
||||
<?php echo $this->form->renderField('version_note'); ?>
|
||||
|
||||
|
||||
<input type="hidden" name="task" value="">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<?php echo $this->form->renderField('body'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
8
administrator/components/com_users/tmpl/note/edit.xml
Normal file
8
administrator/components/com_users/tmpl/note/edit.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<layout title="COM_USERS_NOTE_VIEW_EDIT_TITLE">
|
||||
<message>
|
||||
<![CDATA[COM_USERS_NOTE_VIEW_EDIT_DESC]]>
|
||||
</message>
|
||||
</layout>
|
||||
</metadata>
|
||||
128
administrator/components/com_users/tmpl/notes/default.php
Normal file
128
administrator/components/com_users/tmpl/notes/default.php
Normal file
@ -0,0 +1,128 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2011 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
/** @var \Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('table.columns')
|
||||
->useScript('multiselect');
|
||||
|
||||
$user = $this->getCurrentUser();
|
||||
$listOrder = $this->escape($this->state->get('list.ordering'));
|
||||
$listDirn = $this->escape($this->state->get('list.direction'));
|
||||
|
||||
?>
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&view=notes'); ?>" method="post" name="adminForm" id="adminForm">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="j-main-container" class="j-main-container">
|
||||
<?php echo LayoutHelper::render('joomla.searchtools.default', ['view' => $this]); ?>
|
||||
|
||||
<?php if (empty($this->items)) : ?>
|
||||
<div class="alert alert-info">
|
||||
<span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
|
||||
<?php echo Text::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<table class="table">
|
||||
<caption class="visually-hidden">
|
||||
<?php echo Text::_('COM_USERS_NOTES_TABLE_CAPTION'); ?>,
|
||||
<span id="orderedBy"><?php echo Text::_('JGLOBAL_SORTED_BY'); ?> </span>,
|
||||
<span id="filteredBy"><?php echo Text::_('JGLOBAL_FILTERED_BY'); ?></span>
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="w-1 text-center">
|
||||
<?php echo HTMLHelper::_('grid.checkall'); ?>
|
||||
</td>
|
||||
<th scope="col" class="w-1 text-center">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_SUBJECT', 'a.subject', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-20 d-none d-md-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_USER', 'u.name', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-10 d-none d-md-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_REVIEW', 'a.review_time', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-1 d-none d-md-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($this->items as $i => $item) :
|
||||
$canEdit = $user->authorise('core.edit', 'com_users.category.' . $item->catid);
|
||||
$canCheckin = $user->authorise('core.admin', 'com_checkin') || $item->checked_out == $user->get('id') || is_null($item->checked_out);
|
||||
$canChange = $user->authorise('core.edit.state', 'com_users.category.' . $item->catid) && $canCheckin;
|
||||
$subject = $item->subject ?: Text::_('COM_USERS_EMPTY_SUBJECT');
|
||||
?>
|
||||
<tr class="row<?php echo $i % 2; ?>">
|
||||
<td class="text-center checklist">
|
||||
<?php echo HTMLHelper::_('grid.id', $i, $item->id, false, 'cid', 'cb', $subject); ?>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<?php echo HTMLHelper::_('jgrid.published', $item->state, $i, 'notes.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?>
|
||||
</td>
|
||||
<th scope="row">
|
||||
<?php if ($item->checked_out) : ?>
|
||||
<?php echo HTMLHelper::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'notes.', $canCheckin); ?>
|
||||
<?php endif; ?>
|
||||
<?php $subject = $item->subject ?: Text::_('COM_USERS_EMPTY_SUBJECT'); ?>
|
||||
<?php if ($canEdit) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_users&task=note.edit&id=' . $item->id); ?>" title="<?php echo Text::_('JACTION_EDIT'); ?> <?php echo $this->escape($subject); ?>">
|
||||
<?php echo $this->escape($subject); ?></a>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($subject); ?>
|
||||
<?php endif; ?>
|
||||
<div class="small">
|
||||
<?php echo Text::_('JCATEGORY') . ': ' . $this->escape($item->category_title); ?>
|
||||
</div>
|
||||
</th>
|
||||
<td class="d-none d-md-table-cell">
|
||||
<?php echo $this->escape($item->user_name); ?>
|
||||
</td>
|
||||
<td class="d-none d-md-table-cell">
|
||||
<?php if ($item->review_time !== null) : ?>
|
||||
<?php echo HTMLHelper::_('date', $item->review_time, Text::_('DATE_FORMAT_LC4')); ?>
|
||||
<?php else : ?>
|
||||
<?php echo Text::_('COM_USERS_EMPTY_REVIEW'); ?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td class="d-none d-md-table-cell">
|
||||
<?php echo (int) $item->id; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php // load the pagination. ?>
|
||||
<?php echo $this->pagination->getListFooter(); ?>
|
||||
|
||||
<?php endif; ?>
|
||||
|
||||
<div>
|
||||
<input type="hidden" name="task" value="">
|
||||
<input type="hidden" name="boxchecked" value="0">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<layout title="COM_USERS_NOTES_VIEW_DEFAULT_TITLE">
|
||||
<message>
|
||||
<![CDATA[COM_USERS_NOTES_VIEW_DEFAULT_DESC]]>
|
||||
</message>
|
||||
</layout>
|
||||
</metadata>
|
||||
26
administrator/components/com_users/tmpl/notes/emptystate.php
Normal file
26
administrator/components/com_users/tmpl/notes/emptystate.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
|
||||
$displayData = [
|
||||
'textPrefix' => 'COM_USERS_NOTES',
|
||||
'formURL' => 'index.php?option=com_users&view=notes',
|
||||
'helpURL' => 'https://docs.joomla.org/Special:MyLanguage/Help40:User_Notes',
|
||||
'icon' => 'icon-users user',
|
||||
];
|
||||
|
||||
if ($this->getCurrentUser()->authorise('core.create', 'com_users')) {
|
||||
$displayData['createURL'] = 'index.php?option=com_users&task=note.add';
|
||||
}
|
||||
|
||||
echo LayoutHelper::render('joomla.content.emptystate', $displayData);
|
||||
57
administrator/components/com_users/tmpl/notes/modal.php
Normal file
57
administrator/components/com_users/tmpl/notes/modal.php
Normal file
@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2011 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
?>
|
||||
<div class="unotes">
|
||||
<h1><?php echo Text::sprintf('COM_USERS_NOTES_FOR_USER', $this->user->name, $this->user->id); ?></h1>
|
||||
<?php if (empty($this->items)) : ?>
|
||||
<?php echo Text::_('COM_USERS_NO_NOTES'); ?>
|
||||
<?php else : ?>
|
||||
<ul class="alternating">
|
||||
<?php foreach ($this->items as $item) : ?>
|
||||
<li>
|
||||
<div class="fltlft utitle">
|
||||
<?php if ($item->subject) : ?>
|
||||
<h4><?php echo Text::sprintf('COM_USERS_NOTE_N_SUBJECT', (int) $item->id, $this->escape($item->subject)); ?></h4>
|
||||
<?php else : ?>
|
||||
<h4><?php echo Text::sprintf('COM_USERS_NOTE_N_SUBJECT', (int) $item->id, Text::_('COM_USERS_EMPTY_SUBJECT')); ?></h4>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="fltlft utitle">
|
||||
<?php echo HTMLHelper::_('date', $item->created_time, Text::_('DATE_FORMAT_LC2')); ?>
|
||||
</div>
|
||||
|
||||
<?php $category_image = $item->cparams->get('image'); ?>
|
||||
|
||||
<?php if ($item->catid && isset($category_image)) : ?>
|
||||
<div class="fltlft utitle">
|
||||
<?php echo HTMLHelper::_('users.image', $category_image); ?>
|
||||
</div>
|
||||
|
||||
<div class="fltlft utitle">
|
||||
<em><?php echo $this->escape($item->category_title); ?></em>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="clr"></div>
|
||||
<div class="ubody">
|
||||
<?php echo (isset($item->body) ? HTMLHelper::_('content.prepare', $item->body) : ''); ?>
|
||||
</div>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
82
administrator/components/com_users/tmpl/user/edit.php
Normal file
82
administrator/components/com_users/tmpl/user/edit.php
Normal file
@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
/** @var Joomla\Component\Users\Administrator\View\User\HtmlView $this */
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('keepalive')
|
||||
->useScript('form.validate');
|
||||
|
||||
$input = Factory::getApplication()->getInput();
|
||||
|
||||
// Get the form fieldsets.
|
||||
$fieldsets = $this->form->getFieldsets();
|
||||
$settings = [];
|
||||
|
||||
$this->useCoreUI = true;
|
||||
?>
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="user-form" enctype="multipart/form-data" aria-label="<?php echo Text::_('COM_USERS_USER_FORM_' . ((int) $this->item->id === 0 ? 'NEW' : 'EDIT'), true); ?>" class="form-validate">
|
||||
|
||||
<h2><?php echo $this->escape($this->form->getValue('name', null, Text::_('COM_USERS_USER_NEW_USER_TITLE'))); ?></h2>
|
||||
|
||||
<div class="main-card">
|
||||
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', ['active' => 'details', 'recall' => true, 'breakpoint' => 768]); ?>
|
||||
|
||||
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'details', Text::_('COM_USERS_USER_ACCOUNT_DETAILS')); ?>
|
||||
<fieldset class="options-form">
|
||||
<legend><?php echo Text::_('COM_USERS_USER_ACCOUNT_DETAILS'); ?></legend>
|
||||
<div class="form-grid">
|
||||
<?php echo $this->form->renderFieldset('user_details'); ?>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<?php echo HTMLHelper::_('uitab.endTab'); ?>
|
||||
|
||||
<?php if ($this->grouplist) : ?>
|
||||
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'groups', Text::_('COM_USERS_ASSIGNED_GROUPS')); ?>
|
||||
<fieldset id="fieldset-groups" class="options-form">
|
||||
<legend><?php echo Text::_('COM_USERS_ASSIGNED_GROUPS'); ?></legend>
|
||||
<div>
|
||||
<?php echo $this->loadTemplate('groups'); ?>
|
||||
</div>
|
||||
</fieldset>
|
||||
<?php echo HTMLHelper::_('uitab.endTab'); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php
|
||||
$this->ignore_fieldsets = ['user_details'];
|
||||
echo LayoutHelper::render('joomla.edit.params', $this);
|
||||
?>
|
||||
|
||||
<?php if (!empty($this->mfaConfigurationUI)) : ?>
|
||||
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'multifactorauth', Text::_('COM_USERS_USER_MULTIFACTOR_AUTH')); ?>
|
||||
<fieldset class="options-form">
|
||||
<legend><?php echo Text::_('COM_USERS_USER_MULTIFACTOR_AUTH'); ?></legend>
|
||||
<?php echo $this->mfaConfigurationUI ?>
|
||||
</fieldset>
|
||||
<?php echo HTMLHelper::_('uitab.endTab'); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php echo HTMLHelper::_('uitab.endTabSet'); ?>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="task" value="">
|
||||
<input type="hidden" name="return" value="<?php echo $input->getBase64('return'); ?>">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</form>
|
||||
8
administrator/components/com_users/tmpl/user/edit.xml
Normal file
8
administrator/components/com_users/tmpl/user/edit.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<layout title="COM_USERS_USER_VIEW_EDIT_TITLE">
|
||||
<message>
|
||||
<![CDATA[COM_USERS_USER_VIEW_EDIT_DESC]]>
|
||||
</message>
|
||||
</layout>
|
||||
</metadata>
|
||||
15
administrator/components/com_users/tmpl/user/edit_groups.php
Normal file
15
administrator/components/com_users/tmpl/user/edit_groups.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
echo HTMLHelper::_('access.usergroups', 'jform[groups]', $this->groups, true);
|
||||
235
administrator/components/com_users/tmpl/users/default.php
Normal file
235
administrator/components/com_users/tmpl/users/default.php
Normal file
@ -0,0 +1,235 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2007 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Access\Access;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
use Joomla\CMS\Plugin\PluginHelper;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\CMS\String\PunycodeHelper;
|
||||
|
||||
/** @var \Joomla\Component\Users\Administrator\View\Users\HtmlView $this */
|
||||
|
||||
|
||||
/** @var \Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('table.columns')
|
||||
->useScript('multiselect');
|
||||
|
||||
$listOrder = $this->escape($this->state->get('list.ordering'));
|
||||
$listDirn = $this->escape($this->state->get('list.direction'));
|
||||
$loggeduser = $this->getCurrentUser();
|
||||
$mfa = PluginHelper::isEnabled('multifactorauth');
|
||||
|
||||
?>
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&view=users'); ?>" method="post" name="adminForm" id="adminForm">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div id="j-main-container" class="j-main-container">
|
||||
<?php
|
||||
// Search tools bar
|
||||
echo LayoutHelper::render('joomla.searchtools.default', ['view' => $this]);
|
||||
?>
|
||||
<?php if (empty($this->items)) : ?>
|
||||
<div class="alert alert-info">
|
||||
<span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
|
||||
<?php echo Text::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<table class="table" id="userList">
|
||||
<caption class="visually-hidden">
|
||||
<?php echo Text::_('COM_USERS_USERS_TABLE_CAPTION'); ?>,
|
||||
<span id="orderedBy"><?php echo Text::_('JGLOBAL_SORTED_BY'); ?> </span>,
|
||||
<span id="filteredBy"><?php echo Text::_('JGLOBAL_FILTERED_BY'); ?></span>
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="w-1 text-center">
|
||||
<?php echo HTMLHelper::_('grid.checkall'); ?>
|
||||
</td>
|
||||
<th scope="col">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_NAME', 'a.name', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-10 d-none d-md-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'JGLOBAL_USERNAME', 'a.username', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-5 text-center d-md-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_ENABLED', 'a.block', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-5 text-center d-md-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_ACTIVATED', 'a.activation', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<?php if ($mfa) : ?>
|
||||
<th scope="col" class="w-5 text-center d-none d-md-table-cell">
|
||||
<?php echo Text::_('COM_USERS_HEADING_MFA'); ?>
|
||||
</th>
|
||||
<?php endif; ?>
|
||||
<th scope="col" class="w-12 d-none d-md-table-cell">
|
||||
<?php echo Text::_('COM_USERS_HEADING_GROUPS'); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-12 d-none d-xl-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'JGLOBAL_EMAIL', 'a.email', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-12 d-none d-xl-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_LAST_VISIT_DATE', 'a.lastvisitDate', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-12 d-none d-xl-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_REGISTRATION_DATE', 'a.registerDate', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-5 d-none d-md-table-cell">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($this->items as $i => $item) :
|
||||
$canEdit = $this->canDo->get('core.edit');
|
||||
$canChange = $loggeduser->authorise('core.edit.state', 'com_users');
|
||||
|
||||
// If this group is super admin and this user is not super admin, $canEdit is false
|
||||
if ((!$loggeduser->authorise('core.admin')) && Access::check($item->id, 'core.admin')) {
|
||||
$canEdit = false;
|
||||
$canChange = false;
|
||||
}
|
||||
?>
|
||||
<tr class="row<?php echo $i % 2; ?>">
|
||||
<td class="text-center">
|
||||
<?php if ($canEdit || $canChange) : ?>
|
||||
<?php echo HTMLHelper::_('grid.id', $i, $item->id, false, 'cid', 'cb', $item->name); ?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<th scope="row">
|
||||
<div class="name break-word">
|
||||
<?php if ($canEdit) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_users&task=user.edit&id=' . (int) $item->id); ?>" title="<?php echo Text::sprintf('COM_USERS_EDIT_USER', $this->escape($item->name)); ?>">
|
||||
<?php echo $this->escape($item->name); ?></a>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($item->name); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<?php echo HTMLHelper::_('users.addNote', $item->id); ?>
|
||||
<?php if ($item->note_count > 0) : ?>
|
||||
<button type="button" class="btn btn-secondary btn-sm dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<span class="visually-hidden"><?php echo Text::_('JGLOBAL_TOGGLE_DROPDOWN'); ?></span>
|
||||
</button>
|
||||
<div class="dropdown-menu">
|
||||
<?php echo HTMLHelper::_('users.filterNotes', $item->note_count, $item->id); ?>
|
||||
<?php echo HTMLHelper::_('users.notes', $item->note_count, $item->id); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php echo HTMLHelper::_('users.notesModal', $item->note_count, $item->id); ?>
|
||||
<?php if ($item->requireReset == '1') : ?>
|
||||
<span class="badge bg-warning text-dark"><?php echo Text::_('COM_USERS_PASSWORD_RESET_REQUIRED'); ?></span>
|
||||
<?php endif; ?>
|
||||
</th>
|
||||
<td class="break-word d-none d-md-table-cell">
|
||||
<?php echo $this->escape($item->username); ?>
|
||||
</td>
|
||||
<td class="text-center d-md-table-cell">
|
||||
<?php $self = $loggeduser->id == $item->id; ?>
|
||||
<?php if ($canChange) : ?>
|
||||
<?php echo HTMLHelper::_('jgrid.state', HTMLHelper::_('users.blockStates', $self), $item->block, $i, 'users.', !$self); ?>
|
||||
<?php else : ?>
|
||||
<?php echo HTMLHelper::_('jgrid.state', HTMLHelper::_('users.blockStates', $self), $item->block, $i, 'users.', false); ?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td class="text-center d-md-table-cell">
|
||||
<?php
|
||||
$activated = empty($item->activation) ? 0 : 1;
|
||||
echo HTMLHelper::_('jgrid.state', HTMLHelper::_('users.activateStates'), $activated, $i, 'users.', (bool) $activated);
|
||||
?>
|
||||
</td>
|
||||
<?php if ($mfa) : ?>
|
||||
<td class="text-center d-none d-md-table-cell">
|
||||
<span class="tbody-icon">
|
||||
<?php if ($item->mfaRecords > 0 || !empty($item->otpKey)) : ?>
|
||||
<span class="icon-check" aria-hidden="true" aria-describedby="tip-mfa<?php echo $i; ?>"></span>
|
||||
<div role="tooltip" id="tip-mfa<?php echo $i; ?>">
|
||||
<?php echo Text::_('COM_USERS_MFA_ACTIVE'); ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<span class="icon-times" aria-hidden="true" aria-describedby="tip-mfa<?php echo $i; ?>"></span>
|
||||
<div role="tooltip" id="tip-mfa<?php echo $i; ?>">
|
||||
<?php echo Text::_('COM_USERS_MFA_NOTACTIVE'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</span>
|
||||
</td>
|
||||
<?php endif; ?>
|
||||
<td class="d-none d-md-table-cell">
|
||||
<?php if (substr_count($item->group_names, "\n") > 1) : ?>
|
||||
<span tabindex="0"><?php echo Text::_('COM_USERS_USERS_MULTIPLE_GROUPS'); ?></span>
|
||||
<div role="tooltip" id="tip<?php echo $i; ?>">
|
||||
<strong><?php echo Text::_('COM_USERS_HEADING_GROUPS'); ?></strong>
|
||||
<ul><li><?php echo str_replace("\n", '</li><li>', $item->group_names); ?></li></ul>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<?php echo nl2br($item->group_names, false); ?>
|
||||
<?php endif; ?>
|
||||
<a class="btn btn-sm btn-secondary"
|
||||
href="<?php echo Route::_('index.php?option=com_users&view=debuguser&user_id=' . (int) $item->id); ?>">
|
||||
<?php echo Text::_('COM_USERS_DEBUG_PERMISSIONS'); ?>
|
||||
</a>
|
||||
</td>
|
||||
<td class="d-none d-xl-table-cell break-word">
|
||||
<?php echo PunycodeHelper::emailToUTF8($this->escape($item->email)); ?>
|
||||
</td>
|
||||
<td class="d-none d-xl-table-cell">
|
||||
<?php if ($item->lastvisitDate !== null) : ?>
|
||||
<?php echo HTMLHelper::_('date', $item->lastvisitDate, Text::_('DATE_FORMAT_LC6')); ?>
|
||||
<?php else : ?>
|
||||
<?php echo Text::_('JNEVER'); ?>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<td class="d-none d-xl-table-cell">
|
||||
<?php echo HTMLHelper::_('date', $item->registerDate, Text::_('DATE_FORMAT_LC6')); ?>
|
||||
</td>
|
||||
<td class="d-none d-md-table-cell">
|
||||
<?php echo (int) $item->id; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php // load the pagination. ?>
|
||||
<?php echo $this->pagination->getListFooter(); ?>
|
||||
|
||||
<?php // Load the batch processing form if user is allowed ?>
|
||||
<?php
|
||||
if (
|
||||
$loggeduser->authorise('core.create', 'com_users')
|
||||
&& $loggeduser->authorise('core.edit', 'com_users')
|
||||
&& $loggeduser->authorise('core.edit.state', 'com_users')
|
||||
) : ?>
|
||||
<?php echo HTMLHelper::_(
|
||||
'bootstrap.renderModal',
|
||||
'collapseModal',
|
||||
[
|
||||
'title' => Text::_('COM_USERS_BATCH_OPTIONS'),
|
||||
'footer' => $this->loadTemplate('batch_footer'),
|
||||
],
|
||||
$this->loadTemplate('batch_body')
|
||||
); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<input type="hidden" name="task" value="">
|
||||
<input type="hidden" name="boxchecked" value="0">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<metadata>
|
||||
<layout title="COM_USERS_USERS_VIEW_DEFAULT_TITLE">
|
||||
<message>
|
||||
<![CDATA[COM_USERS_USERS_VIEW_DEFAULT_DESC]]>
|
||||
</message>
|
||||
</layout>
|
||||
</metadata>
|
||||
@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2015 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
// Create the copy/move options.
|
||||
$options = [
|
||||
HTMLHelper::_('select.option', 'add', Text::_('COM_USERS_BATCH_ADD')),
|
||||
HTMLHelper::_('select.option', 'del', Text::_('COM_USERS_BATCH_DELETE')),
|
||||
HTMLHelper::_('select.option', 'set', Text::_('COM_USERS_BATCH_SET'))
|
||||
];
|
||||
|
||||
// Create the reset password options.
|
||||
$resetOptions = [
|
||||
HTMLHelper::_('select.option', '', Text::_('COM_USERS_NO_ACTION')),
|
||||
HTMLHelper::_('select.option', 'yes', Text::_('JYES')),
|
||||
HTMLHelper::_('select.option', 'no', Text::_('JNO'))
|
||||
];
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('joomla.batch-copymove');
|
||||
|
||||
?>
|
||||
|
||||
<div class="p-3">
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label id="batch-choose-action-lbl" class="control-label" for="batch-group-id">
|
||||
<?php echo Text::_('COM_USERS_BATCH_GROUP'); ?>
|
||||
</label>
|
||||
<div id="batch-choose-action" class="combo controls">
|
||||
<select class="form-select" name="batch[group_id]" id="batch-group-id">
|
||||
<option value=""><?php echo Text::_('JSELECT'); ?></option>
|
||||
<?php echo HTMLHelper::_('select.options', HTMLHelper::_('user.groups')); ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<fieldset>
|
||||
<legend>
|
||||
<?php echo Text::_('COM_USERS_BATCH_ACTIONS'); ?>
|
||||
</legend>
|
||||
<?php echo HTMLHelper::_('select.radiolist', $options, 'batch[group_action]', '', 'value', 'text', 'add'); ?>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<fieldset id="batch-password-reset_id">
|
||||
<legend>
|
||||
<?php echo Text::_('COM_USERS_REQUIRE_PASSWORD_RESET'); ?>
|
||||
</legend>
|
||||
<?php echo HTMLHelper::_('select.radiolist', $resetOptions, 'batch[reset_id]', '', 'value', 'text', ''); ?>
|
||||
</fieldset>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2015 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
?>
|
||||
<button type="button" class="btn btn-secondary" onclick="document.getElementById('batch-group-id').value=''" data-bs-dismiss="modal">
|
||||
<?php echo Text::_('JCANCEL'); ?>
|
||||
</button>
|
||||
<button type="submit" class="btn btn-success" onclick="Joomla.submitbutton('user.batch');return false;">
|
||||
<?php echo Text::_('JGLOBAL_BATCH_PROCESS'); ?>
|
||||
</button>
|
||||
126
administrator/components/com_users/tmpl/users/modal.php
Normal file
126
administrator/components/com_users/tmpl/users/modal.php
Normal file
@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Administrator
|
||||
* @subpackage com_users
|
||||
*
|
||||
* @copyright (C) 2009 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Layout\LayoutHelper;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
|
||||
$wa = $this->document->getWebAssetManager();
|
||||
$wa->useScript('multiselect')->useScript('modal-content-select');
|
||||
|
||||
$input = Factory::getApplication()->getInput();
|
||||
$field = $input->getCmd('field', '');
|
||||
$listOrder = $this->escape($this->state->get('list.ordering', ''));
|
||||
$listDirn = $this->escape($this->state->get('list.direction', ''));
|
||||
$enabledStates = [0 => 'icon-check', 1 => 'icon-times'];
|
||||
$activatedStates = [0 => 'icon-check', 1 => 'icon-times'];
|
||||
$userRequired = (int) $input->get('required', 0, 'int');
|
||||
|
||||
?>
|
||||
<div class="container-popup">
|
||||
<form action="<?php echo Route::_('index.php?option=com_users&view=users&layout=modal&tmpl=component&groups=' . $input->get('groups', '', 'BASE64') . '&excluded=' . $input->get('excluded', '', 'BASE64')); ?>" method="post" name="adminForm" id="adminForm">
|
||||
<?php if (!$userRequired) : ?>
|
||||
<div>
|
||||
<button type="button" class="btn btn-primary button-select" data-user-value="0" data-user-name="<?php echo $this->escape(Text::_('JLIB_FORM_SELECT_USER')); ?>"
|
||||
data-user-field="<?php echo $this->escape($field); ?>"><?php echo Text::_('JOPTION_NO_USER'); ?></button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php echo LayoutHelper::render('joomla.searchtools.default', ['view' => $this]); ?>
|
||||
<?php if (empty($this->items)) : ?>
|
||||
<div class="alert alert-info">
|
||||
<span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
|
||||
<?php echo Text::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<table class="table table-sm">
|
||||
<caption class="visually-hidden">
|
||||
<?php echo Text::_('COM_USERS_USERS_TABLE_CAPTION'); ?>,
|
||||
<span id="orderedBy"><?php echo Text::_('JGLOBAL_SORTED_BY'); ?> </span>,
|
||||
<span id="filteredBy"><?php echo Text::_('JGLOBAL_FILTERED_BY'); ?></span>
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_NAME', 'a.name', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-25">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'JGLOBAL_USERNAME', 'a.username', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-1 text-center">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_ENABLED', 'a.block', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-1 text-center">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'COM_USERS_HEADING_ACTIVATED', 'a.activation', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-25">
|
||||
<?php echo Text::_('COM_USERS_HEADING_GROUPS'); ?>
|
||||
</th>
|
||||
<th scope="col" class="w-1">
|
||||
<?php echo HTMLHelper::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $i = 0; ?>
|
||||
<?php foreach ($this->items as $item) :
|
||||
$attribs = 'data-content-select data-content-type="com_users.user"'
|
||||
. ' data-id="' . ((int) $item->id) . '"'
|
||||
. ' data-name="' . $this->escape($item->name) . '"'
|
||||
// @TODO: data-user-value, data-user-name, data-user-field is for backward compatibility, remove in Joomla 6
|
||||
. ' data-user-value="' . ((int) $item->id) . '"'
|
||||
. ' data-user-name="' . $this->escape($item->name) . '"'
|
||||
. ' data-user-field="' . $this->escape($field) . '"';
|
||||
?>
|
||||
<tr class="row<?php echo $i % 2; ?>">
|
||||
<th scope="row">
|
||||
<a class="pointer button-select" href="#" <?php echo $attribs; ?>>
|
||||
<?php echo $this->escape($item->name); ?>
|
||||
</a>
|
||||
</th>
|
||||
<td>
|
||||
<?php echo $this->escape($item->username); ?>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span class="tbody-icon">
|
||||
<span class="<?php echo $enabledStates[(int) $this->escape($item->block)]; ?>"></span>
|
||||
</span>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<span class="tbody-icon">
|
||||
<span class="<?php echo $activatedStates[(empty($item->activation) ? 0 : 1)]; ?>"></span>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo nl2br($item->group_names, false); ?>
|
||||
</td>
|
||||
<td>
|
||||
<?php echo (int) $item->id; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php // load the pagination. ?>
|
||||
<?php echo $this->pagination->getListFooter(); ?>
|
||||
|
||||
<?php endif; ?>
|
||||
<input type="hidden" name="task" value="">
|
||||
<input type="hidden" name="field" value="<?php echo $this->escape($field); ?>">
|
||||
<input type="hidden" name="boxchecked" value="0">
|
||||
<input type="hidden" name="required" value="<?php echo $userRequired; ?>">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</form>
|
||||
</div>
|
||||
Reference in New Issue
Block a user