mirror of
https://github.com/Karaka-Management/oms-Admin.git
synced 2026-02-16 04:28:39 +00:00
allow users to change the localization
This commit is contained in:
parent
d732982fb5
commit
e35e530f7f
|
|
@ -6,7 +6,7 @@ use phpOMS\Account\PermissionType;
|
||||||
use phpOMS\Router\RouteVerb;
|
use phpOMS\Router\RouteVerb;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'^.*/admin/settings.*$' => [
|
'^.*/admin/settings(\?.*|$)' => [
|
||||||
[
|
[
|
||||||
'dest' => '\Modules\Admin\Controller\ApiController:apiSettingsSet',
|
'dest' => '\Modules\Admin\Controller\ApiController:apiSettingsSet',
|
||||||
'verb' => RouteVerb::SET,
|
'verb' => RouteVerb::SET,
|
||||||
|
|
@ -66,7 +66,7 @@ return [
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
'^.*/admin/find/account.*$' => [
|
'^.*/admin/find/account(\?.*|$)' => [
|
||||||
[
|
[
|
||||||
'dest' => '\Modules\Admin\Controller\ApiController:apiAccountFind',
|
'dest' => '\Modules\Admin\Controller\ApiController:apiAccountFind',
|
||||||
'verb' => RouteVerb::GET,
|
'verb' => RouteVerb::GET,
|
||||||
|
|
@ -100,7 +100,7 @@ return [
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
'^.*/admin/account$' => [
|
'^.*/admin/account(\?.*|$)' => [
|
||||||
[
|
[
|
||||||
'dest' => '\Modules\Admin\Controller\ApiController:apiAccountCreate',
|
'dest' => '\Modules\Admin\Controller\ApiController:apiAccountCreate',
|
||||||
'verb' => RouteVerb::PUT,
|
'verb' => RouteVerb::PUT,
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ use Modules\Admin\Models\Group;
|
||||||
use Modules\Admin\Models\GroupMapper;
|
use Modules\Admin\Models\GroupMapper;
|
||||||
use Modules\Admin\Models\GroupPermission;
|
use Modules\Admin\Models\GroupPermission;
|
||||||
use Modules\Admin\Models\GroupPermissionMapper;
|
use Modules\Admin\Models\GroupPermissionMapper;
|
||||||
|
use Modules\Admin\Models\LocalizationMapper;
|
||||||
use Modules\Admin\Models\ModuleStatusUpdateType;
|
use Modules\Admin\Models\ModuleStatusUpdateType;
|
||||||
|
|
||||||
use Modules\Admin\Models\NullAccount;
|
use Modules\Admin\Models\NullAccount;
|
||||||
|
|
@ -49,6 +50,8 @@ use phpOMS\Uri\HttpUri;
|
||||||
use phpOMS\Utils\Parser\Markdown\Markdown;
|
use phpOMS\Utils\Parser\Markdown\Markdown;
|
||||||
use phpOMS\Validation\Network\Email;
|
use phpOMS\Validation\Network\Email;
|
||||||
use phpOMS\Version\Version;
|
use phpOMS\Version\Version;
|
||||||
|
use phpOMS\Account\PermissionType;
|
||||||
|
use Modules\Admin\Models\PermissionState;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Admin controller class.
|
* Admin controller class.
|
||||||
|
|
@ -131,13 +134,145 @@ final class ApiController extends Controller
|
||||||
$this->app->appSettings->get($id, $name, $module, $group, $account),
|
$this->app->appSettings->get($id, $name, $module, $group, $account),
|
||||||
$data,
|
$data,
|
||||||
function() use($id, $name, $content, $module, $group, $account) : void {
|
function() use($id, $name, $content, $module, $group, $account) : void {
|
||||||
$this->app->appSettings->set([['id' => $id, 'name' => $name, 'content' => $content, 'module' => $module, 'group' => $group, 'account' => $account]], true);
|
$this->app->appSettings->set([
|
||||||
|
[
|
||||||
|
'id' => $id,
|
||||||
|
'name' => $name,
|
||||||
|
'content' => $content,
|
||||||
|
'module' => $module,
|
||||||
|
'group' => $group,
|
||||||
|
'account' => $account
|
||||||
|
]
|
||||||
|
], true);
|
||||||
},
|
},
|
||||||
'settings'
|
'settings'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Settigns', 'Settings successfully modified', $dataSettings);
|
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Settings', 'Settings successfully modified', $dataSettings);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Api method for modifying account localization
|
||||||
|
*
|
||||||
|
* @param RequestAbstract $request Request
|
||||||
|
* @param ResponseAbstract $response Response
|
||||||
|
* @param mixed $data Generic data
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
public function apiSettingsAccountLocalizationSet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||||
|
{
|
||||||
|
$requestAccount = $request->getHeader()->getAccount();
|
||||||
|
$accountId = (int) $request->getData('account_id');
|
||||||
|
|
||||||
|
if ($requestAccount !== $accountId
|
||||||
|
&& !$this->app->accountManager->get($accountId)->hasPermission(
|
||||||
|
PermissionType::MODIFY, $this->app->orgId, $this->app->appName, self::MODULE_NAME, PermissionState::ACCOUNT_SETTINGS, $accountId)
|
||||||
|
) {
|
||||||
|
$this->fillJsonResponse($request, $response, NotificationLevel::HIDDEN, '', '', []);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var Localization #l11n */
|
||||||
|
$l11n = AccountMapper::get($accountId)->getL11n();
|
||||||
|
|
||||||
|
if ((bool) ($request->getData('load') ?? false)) {
|
||||||
|
$locale = \explode('_', $request->getData('localization_load'));
|
||||||
|
$l11n->loadFromLanguage($locale[0], $locale[1]);
|
||||||
|
|
||||||
|
LocalizationMapper::update($l11n);
|
||||||
|
|
||||||
|
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully modified', $l11n);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$dataSettings = $request->getLike('settings_(.*)');
|
||||||
|
|
||||||
|
$l11n->setCountry($dataSettings['settings_country']);
|
||||||
|
$l11n->setLanguage($dataSettings['settings_language']);
|
||||||
|
$l11n->setTemperature($dataSettings['settings_temperature']);
|
||||||
|
|
||||||
|
$l11n->setTimezone($dataSettings['settings_timezone']);
|
||||||
|
$l11n->setDatetime(
|
||||||
|
[
|
||||||
|
'very_short' => $dataSettings['settings_timeformat_vs'],
|
||||||
|
'short' => $dataSettings['settings_timeformat_s'],
|
||||||
|
'medium' => $dataSettings['settings_timeformat_m'],
|
||||||
|
'long' => $dataSettings['settings_timeformat_l'],
|
||||||
|
'very_long' => $dataSettings['settings_timeformat_vl'],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$l11n->setCurrency($dataSettings['settings_currency']);
|
||||||
|
$l11n->setCurrencyFormat($dataSettings['settings_currencyformat']);
|
||||||
|
|
||||||
|
$l11n->setDecimal($dataSettings['settings_decimal']);
|
||||||
|
$l11n->setThousands($dataSettings['settings_thousands']);
|
||||||
|
|
||||||
|
$l11n->setWeight(
|
||||||
|
[
|
||||||
|
'very_light' => $dataSettings['settings_weight_vl'],
|
||||||
|
'light' => $dataSettings['settings_weight_l'],
|
||||||
|
'medium' => $dataSettings['settings_weight_m'],
|
||||||
|
'heavy' => $dataSettings['settings_weight_h'],
|
||||||
|
'very_heavy' => $dataSettings['settings_weight_vh'],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$l11n->setSpeed(
|
||||||
|
[
|
||||||
|
'very_slow' => $dataSettings['settings_speed_vs'],
|
||||||
|
'slow' => $dataSettings['settings_speed_s'],
|
||||||
|
'medium' => $dataSettings['settings_speed_m'],
|
||||||
|
'fast' => $dataSettings['settings_speed_f'],
|
||||||
|
'very_fast' => $dataSettings['settings_speed_vf'],
|
||||||
|
'sea' => $dataSettings['settings_speed_sea'],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$l11n->setLength(
|
||||||
|
[
|
||||||
|
'very_short' => $dataSettings['settings_length_vs'],
|
||||||
|
'short' => $dataSettings['settings_length_s'],
|
||||||
|
'medium' => $dataSettings['settings_length_m'],
|
||||||
|
'long' => $dataSettings['settings_length_l'],
|
||||||
|
'very_long' => $dataSettings['settings_length_vl'],
|
||||||
|
'sea' => $dataSettings['settings_length_sea'],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$l11n->setArea(
|
||||||
|
[
|
||||||
|
'very_small' => $dataSettings['settings_area_vs'],
|
||||||
|
'small' => $dataSettings['settings_area_s'],
|
||||||
|
'medium' => $dataSettings['settings_area_m'],
|
||||||
|
'large' => $dataSettings['settings_area_l'],
|
||||||
|
'very_large' => $dataSettings['settings_area_vl'],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
$l11n->setVolume(
|
||||||
|
[
|
||||||
|
'very_small' => $dataSettings['settings_volume_vs'],
|
||||||
|
'small' => $dataSettings['settings_volume_s'],
|
||||||
|
'medium' => $dataSettings['settings_volume_m'],
|
||||||
|
'large' => $dataSettings['settings_volume_l'],
|
||||||
|
'very_large' => $dataSettings['settings_volume_vl'],
|
||||||
|
'tablespoon' => $dataSettings['settings_volume_tablespoon'],
|
||||||
|
'teaspoon' => $dataSettings['settings_volume_teaspoon'],
|
||||||
|
'glass' => $dataSettings['settings_volume_glass'],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
LocalizationMapper::update($l11n);
|
||||||
|
|
||||||
|
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully modified', $l11n);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -114,8 +114,12 @@ final class BackendController extends Controller
|
||||||
$view = new View($this->app->l11nManager, $request, $response);
|
$view = new View($this->app->l11nManager, $request, $response);
|
||||||
$view->setTemplate('/Modules/Admin/Theme/Backend/accounts-list');
|
$view->setTemplate('/Modules/Admin/Theme/Backend/accounts-list');
|
||||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1000104001, $request, $response));
|
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1000104001, $request, $response));
|
||||||
$view->setData('list:elements', AccountMapper::getNewest(50, null, RelationType::NONE));
|
|
||||||
$view->setData('list:count', 1);
|
if ($request->getData('ptype') === '-') {
|
||||||
|
$view->setData('accounts', AccountMapper::getBeforePivot((int) ($request->getData('id') ?? 0), null, 25));
|
||||||
|
} else {
|
||||||
|
$view->setData('accounts', AccountMapper::getAfterPivot((int) ($request->getData('id') ?? 0), null, 25));
|
||||||
|
}
|
||||||
|
|
||||||
return $view;
|
return $view;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace Modules\Admin\Models;
|
namespace Modules\Admin\Models;
|
||||||
|
|
||||||
|
use phpOMS\Account\AccountStatus;
|
||||||
use phpOMS\Auth\LoginReturnType;
|
use phpOMS\Auth\LoginReturnType;
|
||||||
use phpOMS\DataStorage\Database\DataMapperAbstract;
|
use phpOMS\DataStorage\Database\DataMapperAbstract;
|
||||||
use phpOMS\DataStorage\Database\Query\Builder;
|
use phpOMS\DataStorage\Database\Query\Builder;
|
||||||
|
|
@ -115,7 +116,12 @@ final class AccountMapper extends DataMapperAbstract
|
||||||
public static function getWithPermissions(int $id) : Account
|
public static function getWithPermissions(int $id) : Account
|
||||||
{
|
{
|
||||||
$account = self::get($id);
|
$account = self::get($id);
|
||||||
$groupPermissions = GroupPermissionMapper::getFor(\array_keys($account->getGroups()), 'group', RelationType::ALL, 2);
|
$groupPermissions = GroupPermissionMapper::getFor(
|
||||||
|
\array_keys($account->getGroups()),
|
||||||
|
'group',
|
||||||
|
RelationType::ALL,
|
||||||
|
2
|
||||||
|
);
|
||||||
|
|
||||||
if (\is_array($groupPermissions)) {
|
if (\is_array($groupPermissions)) {
|
||||||
foreach ($groupPermissions as $permission) {
|
foreach ($groupPermissions as $permission) {
|
||||||
|
|
@ -158,10 +164,11 @@ final class AccountMapper extends DataMapperAbstract
|
||||||
$result = null;
|
$result = null;
|
||||||
|
|
||||||
$query = new Builder(self::$db);
|
$query = new Builder(self::$db);
|
||||||
$result = $query->select('account_id', 'account_login', 'account_password', 'account_password_temp', 'account_tries')
|
$result = $query->select('account_id', 'account_login', 'account_password', 'account_password_temp', 'account_tries', 'account_status')
|
||||||
->from('account')
|
->from('account')
|
||||||
->where('account_login', '=', $login)
|
->where('account_login', '=', $login)
|
||||||
->execute()->fetchAll();
|
->execute()
|
||||||
|
->fetchAll();
|
||||||
|
|
||||||
if (!isset($result[0])) {
|
if (!isset($result[0])) {
|
||||||
return LoginReturnType::WRONG_USERNAME;
|
return LoginReturnType::WRONG_USERNAME;
|
||||||
|
|
@ -174,16 +181,33 @@ final class AccountMapper extends DataMapperAbstract
|
||||||
return LoginReturnType::WRONG_INPUT_EXCEEDED;
|
return LoginReturnType::WRONG_INPUT_EXCEEDED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($result['account_status'] !== AccountStatus::ACTIVE) {
|
||||||
|
return LoginReturnType::INACTIVE;
|
||||||
|
}
|
||||||
|
|
||||||
if (empty($result['account_password'])) {
|
if (empty($result['account_password'])) {
|
||||||
return LoginReturnType::EMPTY_PASSWORD;
|
return LoginReturnType::EMPTY_PASSWORD;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\password_verify($password, $result['account_password'] ?? '')) {
|
if (\password_verify($password, $result['account_password'] ?? '')) {
|
||||||
|
$query->update('account')
|
||||||
|
->set(['account_lactive' => new \DateTime('now')])
|
||||||
|
->where('account_login', '=', $login)
|
||||||
|
->execute();
|
||||||
|
|
||||||
return $result['account_id'];
|
return $result['account_id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($result['account_password_temp']) && \password_verify($password, $result['account_password_temp'] ?? '')) {
|
if (!empty($result['account_password_temp'])
|
||||||
$query->update('account')->set(['account_password_temp' => ''])->where('account_login', '=', $login)->execute();
|
&& \password_verify($password, $result['account_password_temp'] ?? '')
|
||||||
|
) {
|
||||||
|
$query->update('account')
|
||||||
|
->set([
|
||||||
|
'account_password_temp' => '',
|
||||||
|
'account_lactive' => new \DateTime('now'),
|
||||||
|
])
|
||||||
|
->where('account_login', '=', $login)
|
||||||
|
->execute();
|
||||||
|
|
||||||
return $result['account_id'];
|
return $result['account_id'];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,11 +26,12 @@ use phpOMS\Stdlib\Base\Enum;
|
||||||
*/
|
*/
|
||||||
abstract class PermissionState extends Enum
|
abstract class PermissionState extends Enum
|
||||||
{
|
{
|
||||||
public const SETTINGS = 1;
|
public const SETTINGS = 1;
|
||||||
public const ACCOUNT = 2;
|
public const ACCOUNT = 2;
|
||||||
public const GROUP = 3;
|
public const GROUP = 3;
|
||||||
public const MODULE = 4;
|
public const MODULE = 4;
|
||||||
public const LOG = 5;
|
public const LOG = 5;
|
||||||
public const ROUTE = 6;
|
public const ROUTE = 6;
|
||||||
public const APP = 7;
|
public const APP = 7;
|
||||||
|
public const ACCOUNT_SETTINGS = 8;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,18 @@
|
||||||
*/
|
*/
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use \phpOMS\Account\AccountStatus;
|
||||||
|
use phpOMS\Uri\UriFactory;
|
||||||
|
|
||||||
use \phpOMS\Account\AccountStatus;
|
/**
|
||||||
|
* @var \phpOMS\Views\View $this
|
||||||
/**
|
* @var \Modules\Admin\Models\Account[] $accounts
|
||||||
* @var \phpOMS\Views\View $this
|
|
||||||
*/
|
*/
|
||||||
|
$accounts = $this->getData('accounts') ?? [];
|
||||||
|
|
||||||
|
$previous = empty($accounts) ? '{/prefix}admin/account/list' : '{/prefix}admin/account/list?{?}&id=' . \reset($accounts)->getId() . '&ptype=-';
|
||||||
|
$next = empty($accounts) ? '{/prefix}admin/account/list' : '{/prefix}admin/account/list?{?}&id=' . \end($accounts)->getId() . '&ptype=+';
|
||||||
|
|
||||||
echo $this->getData('nav')->render(); ?>
|
echo $this->getData('nav')->render(); ?>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
@ -32,10 +38,8 @@ echo $this->getData('nav')->render(); ?>
|
||||||
<td class="wf-100"><?= $this->getHtml('Name') ?><i class="sort-asc fa fa-chevron-up"></i><i class="sort-desc fa fa-chevron-down"></i>
|
<td class="wf-100"><?= $this->getHtml('Name') ?><i class="sort-asc fa fa-chevron-up"></i><i class="sort-desc fa fa-chevron-down"></i>
|
||||||
<td><?= $this->getHtml('Activity') ?><i class="sort-asc fa fa-chevron-up"></i><i class="sort-desc fa fa-chevron-down"></i>
|
<td><?= $this->getHtml('Activity') ?><i class="sort-asc fa fa-chevron-up"></i><i class="sort-desc fa fa-chevron-down"></i>
|
||||||
<td><?= $this->getHtml('Created') ?><i class="sort-asc fa fa-chevron-up"></i><i class="sort-desc fa fa-chevron-down"></i>
|
<td><?= $this->getHtml('Created') ?><i class="sort-asc fa fa-chevron-up"></i><i class="sort-desc fa fa-chevron-down"></i>
|
||||||
<tfoot>
|
|
||||||
<tr><td colspan="5">
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<?php $c = 0; foreach ($this->getData('list:elements') as $key => $value) : ++$c;
|
<?php $c = 0; foreach ($accounts as $key => $value) : ++$c;
|
||||||
$url = \phpOMS\Uri\UriFactory::build('{/prefix}admin/account/settings?{?}&id=' . $value->getId());
|
$url = \phpOMS\Uri\UriFactory::build('{/prefix}admin/account/settings?{?}&id=' . $value->getId());
|
||||||
$color = 'darkred';
|
$color = 'darkred';
|
||||||
if ($value->getStatus() === AccountStatus::ACTIVE) { $color = 'green'; }
|
if ($value->getStatus() === AccountStatus::ACTIVE) { $color = 'green'; }
|
||||||
|
|
@ -55,7 +59,10 @@ echo $this->getData('nav')->render(); ?>
|
||||||
<tr><td colspan="5" class="empty"><?= $this->getHtml('Empty', '0', '0'); ?>
|
<tr><td colspan="5" class="empty"><?= $this->getHtml('Empty', '0', '0'); ?>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</table>
|
</table>
|
||||||
<div class="portlet-foot"></div>
|
<div class="portlet-foot">
|
||||||
|
<a class="button" href="<?= UriFactory::build($previous); ?>">Previous</a>
|
||||||
|
<a class="button" href="<?= UriFactory::build($next); ?>">Next</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -34,9 +34,6 @@ $isntalled = $this->getData('isntalled') ?? [];
|
||||||
<td class="wf-100"><?= $this->getHtml('Name') ?><i class="sort-asc fa fa-chevron-up"></i><i class="sort-desc fa fa-chevron-down"></i>
|
<td class="wf-100"><?= $this->getHtml('Name') ?><i class="sort-asc fa fa-chevron-up"></i><i class="sort-desc fa fa-chevron-down"></i>
|
||||||
<td><?= $this->getHtml('Version') ?>
|
<td><?= $this->getHtml('Version') ?>
|
||||||
<td><?= $this->getHtml('Status') ?><i class="sort-asc fa fa-chevron-up"></i><i class="sort-desc fa fa-chevron-down"></i>
|
<td><?= $this->getHtml('Status') ?><i class="sort-asc fa fa-chevron-up"></i><i class="sort-desc fa fa-chevron-down"></i>
|
||||||
<tfoot>
|
|
||||||
<tr>
|
|
||||||
<td colspan="4">
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<?php $count = 0; foreach ($modules as $key => $module) : ++$count;
|
<?php $count = 0; foreach ($modules as $key => $module) : ++$count;
|
||||||
$url = \phpOMS\Uri\UriFactory::build('{/prefix}admin/module/settings?{?}&id=' . $module['name']['internal']);
|
$url = \phpOMS\Uri\UriFactory::build('{/prefix}admin/module/settings?{?}&id=' . $module['name']['internal']);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user