mirror of
https://github.com/Karaka-Management/oms-Admin.git
synced 2026-02-04 15:38:40 +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;
|
||||
|
||||
return [
|
||||
'^.*/admin/settings.*$' => [
|
||||
'^.*/admin/settings(\?.*|$)' => [
|
||||
[
|
||||
'dest' => '\Modules\Admin\Controller\ApiController:apiSettingsSet',
|
||||
'verb' => RouteVerb::SET,
|
||||
|
|
@ -66,7 +66,7 @@ return [
|
|||
],
|
||||
],
|
||||
|
||||
'^.*/admin/find/account.*$' => [
|
||||
'^.*/admin/find/account(\?.*|$)' => [
|
||||
[
|
||||
'dest' => '\Modules\Admin\Controller\ApiController:apiAccountFind',
|
||||
'verb' => RouteVerb::GET,
|
||||
|
|
@ -100,7 +100,7 @@ return [
|
|||
],
|
||||
],
|
||||
|
||||
'^.*/admin/account$' => [
|
||||
'^.*/admin/account(\?.*|$)' => [
|
||||
[
|
||||
'dest' => '\Modules\Admin\Controller\ApiController:apiAccountCreate',
|
||||
'verb' => RouteVerb::PUT,
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ use Modules\Admin\Models\Group;
|
|||
use Modules\Admin\Models\GroupMapper;
|
||||
use Modules\Admin\Models\GroupPermission;
|
||||
use Modules\Admin\Models\GroupPermissionMapper;
|
||||
use Modules\Admin\Models\LocalizationMapper;
|
||||
use Modules\Admin\Models\ModuleStatusUpdateType;
|
||||
|
||||
use Modules\Admin\Models\NullAccount;
|
||||
|
|
@ -49,6 +50,8 @@ use phpOMS\Uri\HttpUri;
|
|||
use phpOMS\Utils\Parser\Markdown\Markdown;
|
||||
use phpOMS\Validation\Network\Email;
|
||||
use phpOMS\Version\Version;
|
||||
use phpOMS\Account\PermissionType;
|
||||
use Modules\Admin\Models\PermissionState;
|
||||
|
||||
/**
|
||||
* Admin controller class.
|
||||
|
|
@ -131,13 +134,145 @@ final class ApiController extends Controller
|
|||
$this->app->appSettings->get($id, $name, $module, $group, $account),
|
||||
$data,
|
||||
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'
|
||||
);
|
||||
}
|
||||
|
||||
$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->setTemplate('/Modules/Admin/Theme/Backend/accounts-list');
|
||||
$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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace Modules\Admin\Models;
|
||||
|
||||
use phpOMS\Account\AccountStatus;
|
||||
use phpOMS\Auth\LoginReturnType;
|
||||
use phpOMS\DataStorage\Database\DataMapperAbstract;
|
||||
use phpOMS\DataStorage\Database\Query\Builder;
|
||||
|
|
@ -115,7 +116,12 @@ final class AccountMapper extends DataMapperAbstract
|
|||
public static function getWithPermissions(int $id) : Account
|
||||
{
|
||||
$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)) {
|
||||
foreach ($groupPermissions as $permission) {
|
||||
|
|
@ -158,10 +164,11 @@ final class AccountMapper extends DataMapperAbstract
|
|||
$result = null;
|
||||
|
||||
$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')
|
||||
->where('account_login', '=', $login)
|
||||
->execute()->fetchAll();
|
||||
->execute()
|
||||
->fetchAll();
|
||||
|
||||
if (!isset($result[0])) {
|
||||
return LoginReturnType::WRONG_USERNAME;
|
||||
|
|
@ -174,16 +181,33 @@ final class AccountMapper extends DataMapperAbstract
|
|||
return LoginReturnType::WRONG_INPUT_EXCEEDED;
|
||||
}
|
||||
|
||||
if ($result['account_status'] !== AccountStatus::ACTIVE) {
|
||||
return LoginReturnType::INACTIVE;
|
||||
}
|
||||
|
||||
if (empty($result['account_password'])) {
|
||||
return LoginReturnType::EMPTY_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'];
|
||||
}
|
||||
|
||||
if (!empty($result['account_password_temp']) && \password_verify($password, $result['account_password_temp'] ?? '')) {
|
||||
$query->update('account')->set(['account_password_temp' => ''])->where('account_login', '=', $login)->execute();
|
||||
if (!empty($result['account_password_temp'])
|
||||
&& \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'];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,11 +26,12 @@ use phpOMS\Stdlib\Base\Enum;
|
|||
*/
|
||||
abstract class PermissionState extends Enum
|
||||
{
|
||||
public const SETTINGS = 1;
|
||||
public const ACCOUNT = 2;
|
||||
public const GROUP = 3;
|
||||
public const MODULE = 4;
|
||||
public const LOG = 5;
|
||||
public const ROUTE = 6;
|
||||
public const APP = 7;
|
||||
public const SETTINGS = 1;
|
||||
public const ACCOUNT = 2;
|
||||
public const GROUP = 3;
|
||||
public const MODULE = 4;
|
||||
public const LOG = 5;
|
||||
public const ROUTE = 6;
|
||||
public const APP = 7;
|
||||
public const ACCOUNT_SETTINGS = 8;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,12 +12,18 @@
|
|||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
use \phpOMS\Account\AccountStatus;
|
||||
use phpOMS\Uri\UriFactory;
|
||||
|
||||
use \phpOMS\Account\AccountStatus;
|
||||
|
||||
/**
|
||||
* @var \phpOMS\Views\View $this
|
||||
/**
|
||||
* @var \phpOMS\Views\View $this
|
||||
* @var \Modules\Admin\Models\Account[] $accounts
|
||||
*/
|
||||
$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(); ?>
|
||||
|
||||
<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><?= $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>
|
||||
<tfoot>
|
||||
<tr><td colspan="5">
|
||||
<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());
|
||||
$color = 'darkred';
|
||||
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'); ?>
|
||||
<?php endif; ?>
|
||||
</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>
|
||||
|
|
|
|||
|
|
@ -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><?= $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>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="4">
|
||||
<tbody>
|
||||
<?php $count = 0; foreach ($modules as $key => $module) : ++$count;
|
||||
$url = \phpOMS\Uri\UriFactory::build('{/prefix}admin/module/settings?{?}&id=' . $module['name']['internal']);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user