mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Added additional account edit form
This commit is contained in:
parent
c6ec3fb311
commit
ebb6a06c65
36 changed files with 149 additions and 59 deletions
|
|
@ -416,6 +416,7 @@
|
||||||
'DemoSendMessageError': 750,
|
'DemoSendMessageError': 750,
|
||||||
|
|
||||||
'AccountAlreadyExists': 801,
|
'AccountAlreadyExists': 801,
|
||||||
|
'AccountDoesNotExist': 802,
|
||||||
|
|
||||||
'MailServerError': 901,
|
'MailServerError': 901,
|
||||||
'ClientViewError': 902,
|
'ClientViewError': 902,
|
||||||
|
|
|
||||||
|
|
@ -710,6 +710,7 @@
|
||||||
oN[Enums.Notification.DemoSendMessageError] = Utils.i18n('NOTIFICATIONS/DEMO_SEND_MESSAGE_ERROR');
|
oN[Enums.Notification.DemoSendMessageError] = Utils.i18n('NOTIFICATIONS/DEMO_SEND_MESSAGE_ERROR');
|
||||||
|
|
||||||
oN[Enums.Notification.AccountAlreadyExists] = Utils.i18n('NOTIFICATIONS/ACCOUNT_ALREADY_EXISTS');
|
oN[Enums.Notification.AccountAlreadyExists] = Utils.i18n('NOTIFICATIONS/ACCOUNT_ALREADY_EXISTS');
|
||||||
|
oN[Enums.Notification.AccountDoesNotExist] = Utils.i18n('NOTIFICATIONS/ACCOUNT_DOES_NOT_EXIST');
|
||||||
|
|
||||||
oN[Enums.Notification.MailServerError] = Utils.i18n('NOTIFICATIONS/MAIL_SERVER_ERROR');
|
oN[Enums.Notification.MailServerError] = Utils.i18n('NOTIFICATIONS/MAIL_SERVER_ERROR');
|
||||||
oN[Enums.Notification.InvalidInputArgument] = Utils.i18n('NOTIFICATIONS/INVALID_INPUT_ARGUMENT');
|
oN[Enums.Notification.InvalidInputArgument] = Utils.i18n('NOTIFICATIONS/INVALID_INPUT_ARGUMENT');
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
this.deleteAccess = ko.observable(false);
|
this.deleteAccess = ko.observable(false);
|
||||||
this.canBeDalete = ko.observable(Utils.isUnd(bCanBeDelete) ? true : !!bCanBeDelete);
|
this.canBeDalete = ko.observable(Utils.isUnd(bCanBeDelete) ? true : !!bCanBeDelete);
|
||||||
|
this.canBeEdit = this.canBeDalete;
|
||||||
}
|
}
|
||||||
|
|
||||||
_.extend(AccountModel.prototype, AbstractModel.prototype);
|
_.extend(AccountModel.prototype, AbstractModel.prototype);
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,14 @@
|
||||||
require('Knoin/Knoin').showScreenPopup(require('View/Popup/AddAccount'));
|
require('Knoin/Knoin').showScreenPopup(require('View/Popup/AddAccount'));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
AccountsUserSetting.prototype.editAccount = function (oAccountItem)
|
||||||
|
{
|
||||||
|
if (oAccountItem && oAccountItem.canBeEdit())
|
||||||
|
{
|
||||||
|
require('Knoin/Knoin').showScreenPopup(require('View/Popup/AddAccount'), [oAccountItem]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {AccountModel} oAccountToRemove
|
* @param {AccountModel} oAccountToRemove
|
||||||
*/
|
*/
|
||||||
|
|
@ -94,6 +102,21 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
AccountsUserSetting.prototype.onBuild = function (oDom)
|
||||||
|
{
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
oDom
|
||||||
|
.on('click', '.account-item .e-action', function () {
|
||||||
|
var oAccountItem = ko.dataFor(this);
|
||||||
|
if (oAccountItem)
|
||||||
|
{
|
||||||
|
self.editAccount(oAccountItem);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = AccountsUserSetting;
|
module.exports = AccountsUserSetting;
|
||||||
|
|
||||||
}());
|
}());
|
||||||
|
|
@ -158,15 +158,17 @@
|
||||||
/**
|
/**
|
||||||
* @param {?Function} fCallback
|
* @param {?Function} fCallback
|
||||||
* @param {string} sEmail
|
* @param {string} sEmail
|
||||||
* @param {string} sLogin
|
|
||||||
* @param {string} sPassword
|
* @param {string} sPassword
|
||||||
|
* @param {boolean=} bNew
|
||||||
*/
|
*/
|
||||||
RemoteUserStorage.prototype.accountAdd = function (fCallback, sEmail, sLogin, sPassword)
|
RemoteUserStorage.prototype.accountSetup = function (fCallback, sEmail, sPassword, bNew)
|
||||||
{
|
{
|
||||||
this.defaultRequest(fCallback, 'AccountAdd', {
|
bNew = Utils.isUnd(bNew) ? true : !!bNew;
|
||||||
|
|
||||||
|
this.defaultRequest(fCallback, 'AccountSetup', {
|
||||||
'Email': sEmail,
|
'Email': sEmail,
|
||||||
'Login': sLogin,
|
'Password': sPassword,
|
||||||
'Password': sPassword
|
'New': bNew ? '1' : '0'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,12 +26,15 @@
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
cursor: default;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.account-item {
|
.account-item {
|
||||||
|
|
||||||
|
.e-action {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
.button-delete {
|
.button-delete {
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@
|
||||||
{
|
{
|
||||||
AbstractView.call(this, 'Popups', 'PopupsAddAccount');
|
AbstractView.call(this, 'Popups', 'PopupsAddAccount');
|
||||||
|
|
||||||
|
this.isNew = ko.observable(true);
|
||||||
|
|
||||||
this.email = ko.observable('');
|
this.email = ko.observable('');
|
||||||
this.password = ko.observable('');
|
this.password = ko.observable('');
|
||||||
|
|
||||||
|
|
@ -55,10 +57,10 @@
|
||||||
|
|
||||||
this.submitRequest(true);
|
this.submitRequest(true);
|
||||||
|
|
||||||
Remote.accountAdd(_.bind(function (sResult, oData) {
|
Remote.accountSetup(_.bind(function (sResult, oData) {
|
||||||
|
|
||||||
this.submitRequest(false);
|
this.submitRequest(false);
|
||||||
if (Enums.StorageResultType.Success === sResult && oData && 'AccountAdd' === oData.Action)
|
if (Enums.StorageResultType.Success === sResult && oData && 'AccountSetup' === oData.Action)
|
||||||
{
|
{
|
||||||
if (oData.Result)
|
if (oData.Result)
|
||||||
{
|
{
|
||||||
|
|
@ -75,7 +77,7 @@
|
||||||
this.submitError(Utils.getNotification(Enums.Notification.UnknownError));
|
this.submitError(Utils.getNotification(Enums.Notification.UnknownError));
|
||||||
}
|
}
|
||||||
|
|
||||||
}, this), this.email(), '', this.password());
|
}, this), this.email(), this.password(), this.isNew());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
@ -91,6 +93,8 @@
|
||||||
|
|
||||||
AddAccountPopupView.prototype.clearPopup = function ()
|
AddAccountPopupView.prototype.clearPopup = function ()
|
||||||
{
|
{
|
||||||
|
this.isNew(true);
|
||||||
|
|
||||||
this.email('');
|
this.email('');
|
||||||
this.password('');
|
this.password('');
|
||||||
|
|
||||||
|
|
@ -101,9 +105,14 @@
|
||||||
this.submitError('');
|
this.submitError('');
|
||||||
};
|
};
|
||||||
|
|
||||||
AddAccountPopupView.prototype.onShow = function ()
|
AddAccountPopupView.prototype.onShow = function (oAccount)
|
||||||
{
|
{
|
||||||
this.clearPopup();
|
this.clearPopup();
|
||||||
|
if (oAccount && oAccount.canBeEdit())
|
||||||
|
{
|
||||||
|
this.isNew(false);
|
||||||
|
this.email(oAccount.email);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
AddAccountPopupView.prototype.onFocus = function ()
|
AddAccountPopupView.prototype.onFocus = function ()
|
||||||
|
|
|
||||||
|
|
@ -104,14 +104,6 @@
|
||||||
return !this.submitRequest();
|
return !this.submitRequest();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.label = ko.computed(function () {
|
|
||||||
return Utils.i18n('POPUPS_IDENTITIES/' + (this.edit() ? 'TITLE_UPDATE_IDENTITY': 'TITLE_ADD_IDENTITY'));
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
this.button = ko.computed(function () {
|
|
||||||
return Utils.i18n('POPUPS_IDENTITIES/' + (this.edit() ? 'BUTTON_UPDATE_IDENTITY': 'BUTTON_ADD_IDENTITY'));
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
kn.constructorEnd(this);
|
kn.constructorEnd(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -398,7 +398,7 @@ class Actions
|
||||||
*/
|
*/
|
||||||
public function SetAuthLogoutToken()
|
public function SetAuthLogoutToken()
|
||||||
{
|
{
|
||||||
\RainLoop\Utils::SetCookie(self::AUTH_SPEC_TOKEN_KEY, \md5(APP_START_TIME), 0, '/', null, null, true);
|
\RainLoop\Utils::SetCookie(self::AUTH_SPEC_LOGOUT_TOKEN_KEY, \md5(APP_START_TIME), 0, '/', null, null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -764,7 +764,7 @@ class Actions
|
||||||
'[APC:'.(\MailSo\Base\Utils::FunctionExistsAndEnabled('apc_fetch') ? 'on' : 'off').']'.
|
'[APC:'.(\MailSo\Base\Utils::FunctionExistsAndEnabled('apc_fetch') ? 'on' : 'off').']'.
|
||||||
'[MB:'.(\MailSo\Base\Utils::FunctionExistsAndEnabled('mb_convert_encoding') ? 'on' : 'off').']'.
|
'[MB:'.(\MailSo\Base\Utils::FunctionExistsAndEnabled('mb_convert_encoding') ? 'on' : 'off').']'.
|
||||||
'[PDO:'.(\class_exists('PDO') ? \implode(',', \PDO::getAvailableDrivers()) : 'off').']'.
|
'[PDO:'.(\class_exists('PDO') ? \implode(',', \PDO::getAvailableDrivers()) : 'off').']'.
|
||||||
'[Streams:'.\implode(',', \stream_get_transports()).']'
|
'['.\implode(',', \stream_get_transports()).']'
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->oLogger->Write(
|
$this->oLogger->Write(
|
||||||
|
|
@ -1941,7 +1941,7 @@ class Actions
|
||||||
*
|
*
|
||||||
* @throws \MailSo\Base\Exceptions\Exception
|
* @throws \MailSo\Base\Exceptions\Exception
|
||||||
*/
|
*/
|
||||||
public function DoAccountAdd()
|
public function DoAccountSetup()
|
||||||
{
|
{
|
||||||
if (!$this->Config()->Get('webmail', 'allow_additional_accounts', true))
|
if (!$this->Config()->Get('webmail', 'allow_additional_accounts', true))
|
||||||
{
|
{
|
||||||
|
|
@ -1949,38 +1949,32 @@ class Actions
|
||||||
}
|
}
|
||||||
|
|
||||||
$oAccount = $this->getAccountFromToken();
|
$oAccount = $this->getAccountFromToken();
|
||||||
|
$sParentEmail = $oAccount->ParentEmailHelper();
|
||||||
|
|
||||||
|
$aAccounts = $this->GetAccounts($oAccount);
|
||||||
|
if (!\is_array($aAccounts))
|
||||||
|
{
|
||||||
|
$aAccounts = array();
|
||||||
|
}
|
||||||
|
|
||||||
$sEmail = \trim($this->GetActionParam('Email', ''));
|
$sEmail = \trim($this->GetActionParam('Email', ''));
|
||||||
$sPassword = $this->GetActionParam('Password', '');
|
$sPassword = $this->GetActionParam('Password', '');
|
||||||
|
$bNew = '1' === (string) $this->GetActionParam('New', '1');
|
||||||
$sParentEmail = $oAccount->ParentEmailHelper();
|
|
||||||
|
|
||||||
$sEmail = \MailSo\Base\Utils::IdnToAscii($sEmail, true);
|
$sEmail = \MailSo\Base\Utils::IdnToAscii($sEmail, true);
|
||||||
if ($oAccount->Email() === $sEmail || $sParentEmail === $sEmail)
|
if ($bNew && ($oAccount->Email() === $sEmail || $sParentEmail === $sEmail || isset($aAccounts[$sEmail])))
|
||||||
{
|
{
|
||||||
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::AccountAlreadyExists);
|
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::AccountAlreadyExists);
|
||||||
}
|
}
|
||||||
|
else if (!$bNew && !isset($aAccounts[$sEmail]))
|
||||||
|
{
|
||||||
|
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::AccountDoesNotExist);
|
||||||
|
}
|
||||||
|
|
||||||
$oNewAccount = $this->LoginProcess($sEmail, $sPassword);
|
$oNewAccount = $this->LoginProcess($sEmail, $sPassword);
|
||||||
$oNewAccount->SetParentEmail($sParentEmail);
|
$oNewAccount->SetParentEmail($sParentEmail);
|
||||||
|
|
||||||
$aAccounts = $this->GetAccounts($oAccount);
|
|
||||||
if (\is_array($aAccounts))
|
|
||||||
{
|
|
||||||
if (isset($aAccounts[$oNewAccount->Email()]))
|
|
||||||
{
|
|
||||||
throw new \RainLoop\Exceptions\ClientException(\RainLoop\Notifications::AccountAlreadyExists);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$aAccounts[$oNewAccount->Email()] = $oNewAccount->GetAuthToken();
|
$aAccounts[$oNewAccount->Email()] = $oNewAccount->GetAuthToken();
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$aAccounts = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (0 === \strlen($oAccount->ParentEmail()))
|
if (0 === \strlen($oAccount->ParentEmail()))
|
||||||
{
|
{
|
||||||
$aAccounts[$oAccount->Email()] = $oAccount->GetAuthToken();
|
$aAccounts[$oAccount->Email()] = $oAccount->GetAuthToken();
|
||||||
|
|
@ -2211,6 +2205,11 @@ class Actions
|
||||||
$this->ClearSignMeData($oAccount);
|
$this->ClearSignMeData($oAccount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($oAccount && '' === $oAccount->ParentEmail())
|
||||||
|
{
|
||||||
|
\RainLoop\Utils::ClearCookie(\RainLoop\Actions::AUTH_SPEC_TOKEN_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
return $this->TrueResponse(__FUNCTION__);
|
return $this->TrueResponse(__FUNCTION__);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ class Notifications
|
||||||
const DemoSendMessageError = 750;
|
const DemoSendMessageError = 750;
|
||||||
|
|
||||||
const AccountAlreadyExists = 801;
|
const AccountAlreadyExists = 801;
|
||||||
|
const AccountDoesNotExist = 802;
|
||||||
|
|
||||||
const MailServerError = 901;
|
const MailServerError = 901;
|
||||||
const ClientViewError = 902;
|
const ClientViewError = 902;
|
||||||
|
|
@ -124,6 +125,7 @@ class Notifications
|
||||||
self::LicensingBanned => 'LicensingBanned',
|
self::LicensingBanned => 'LicensingBanned',
|
||||||
self::DemoSendMessageError => 'DemoSendMessageError',
|
self::DemoSendMessageError => 'DemoSendMessageError',
|
||||||
self::AccountAlreadyExists => 'AccountAlreadyExists',
|
self::AccountAlreadyExists => 'AccountAlreadyExists',
|
||||||
|
self::AccountDoesNotExist => 'AccountDoesNotExist',
|
||||||
self::MailServerError => 'MailServerError',
|
self::MailServerError => 'MailServerError',
|
||||||
self::ClientViewError => 'ClientViewError',
|
self::ClientViewError => 'ClientViewError',
|
||||||
self::InvalidInputArgument => 'InvalidInputArgument',
|
self::InvalidInputArgument => 'InvalidInputArgument',
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
|
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
|
||||||
<h3>
|
<h3>
|
||||||
<span class="i18n" data-i18n-text="POPUPS_ADD_ACCOUNT/TITLE_ADD_ACCOUNT"></span>
|
<span data-bind="visible: isNew" class="i18n" data-i18n-text="POPUPS_ADD_ACCOUNT/TITLE_ADD_ACCOUNT"></span>
|
||||||
|
<span data-bind="visible: !isNew()" class="i18n" data-i18n-text="POPUPS_ADD_ACCOUNT/TITLE_UPDATE_ACCOUNT"></span>
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
|
@ -17,8 +18,9 @@
|
||||||
<div class="control-group" data-bind="css: {'error': emailError}">
|
<div class="control-group" data-bind="css: {'error': emailError}">
|
||||||
<label class="i18n control-label" data-i18n-text="LOGIN/LABEL_EMAIL"></label>
|
<label class="i18n control-label" data-i18n-text="LOGIN/LABEL_EMAIL"></label>
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
|
<label style="margin-top: 5px;"><strong data-bind="visible: !isNew(), text: email"></strong></label>
|
||||||
<input type="email" class="inputEmail input-large" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
<input type="email" class="inputEmail input-large" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||||
data-bind="textInput: email, onEnter: addAccountCommand, hasfocus: emailFocus" />
|
data-bind="visible: isNew, textInput: email, onEnter: addAccountCommand, hasfocus: emailFocus" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="control-group" data-bind="css: {'error': passwordError}">
|
<div class="control-group" data-bind="css: {'error': passwordError}">
|
||||||
|
|
@ -32,9 +34,11 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a class="btn buttonAddAccount" data-bind="command: addAccountCommand">
|
<a class="btn buttonAddAccount" data-bind="command: addAccountCommand">
|
||||||
<i data-bind="css: {'icon-user-add': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
|
<i data-bind="visible: isNew, css: {'icon-user-add': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
|
||||||
|
<i data-bind="visible: !isNew(), css: {'icon-ok': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
|
||||||
|
|
||||||
<span class="i18n" data-i18n-text="POPUPS_ADD_ACCOUNT/BUTTON_ADD_ACCOUNT"></span>
|
<span data-bind="visible: isNew" class="i18n" data-i18n-text="POPUPS_ADD_ACCOUNT/BUTTON_ADD_ACCOUNT"></span>
|
||||||
|
<span data-bind="visible: !isNew()" class="i18n" data-i18n-text="POPUPS_ADD_ACCOUNT/BUTTON_UPDATE_ACCOUNT"></span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
|
<button type="button" class="close" data-bind="command: cancelCommand">×</button>
|
||||||
<h3>
|
<h3>
|
||||||
<span data-bind="text: label"></span>
|
<span data-bind="visible: !edit()" class="i18n" data-i18n-text="POPUPS_IDENTITIES/TITLE_ADD_IDENTITY"></span>
|
||||||
|
<span data-bind="visible: edit" class="i18n" data-i18n-text="POPUPS_IDENTITIES/TITLE_UPDATE_IDENTITY"></span>
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
|
@ -56,9 +57,11 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<a class="btn buttonAddAccount" data-bind="command: addOrEditIdentityCommand">
|
<a class="btn buttonAddAccount" data-bind="command: addOrEditIdentityCommand">
|
||||||
<i data-bind="css: {'icon-user-add': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
|
<i data-bind="visible: !edit(), css: {'icon-user-add': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
|
||||||
|
<i data-bind="visible: edit, css: {'icon-ok': !submitRequest(), 'icon-spinner animated': submitRequest()}"></i>
|
||||||
|
|
||||||
<span data-bind="text: button"></span>
|
<span data-bind="visible: !edit()" class="i18n" data-i18n-text="POPUPS_IDENTITIES/BUTTON_ADD_IDENTITY"></span>
|
||||||
|
<span data-bind="visible: edit" class="i18n" data-i18n-text="POPUPS_IDENTITIES/BUTTON_UPDATE_IDENTITY"></span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,18 @@
|
||||||
<table class="table table-hover list-table" data-bind="i18nUpdate: accounts">
|
<table class="table table-hover list-table" data-bind="i18nUpdate: accounts">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col />
|
<col />
|
||||||
|
<col style="width: 150px" />
|
||||||
<col style="width: 1%" />
|
<col style="width: 1%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<tbody data-bind="foreach: accounts">
|
<tbody data-bind="foreach: accounts">
|
||||||
<tr class="account-item">
|
<tr class="account-item">
|
||||||
<td>
|
<td class="e-action" data-bind="css: {'e-action': canBeEdit}">
|
||||||
<span class="account-img icon-user"></span>
|
<span class="account-img icon-user"></span>
|
||||||
<span class="account-name" data-bind="text: email"></span>
|
<span class="account-name" data-bind="text: email"></span>
|
||||||
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="css: {'delete-access': deleteAccess()}, click: function(oAccount) { $root.deleteAccount(oAccount); }">
|
</td>
|
||||||
|
<td>
|
||||||
|
<span data-bind="visible: !canBeDalete()"></span>
|
||||||
|
<a class="btn btn-small btn-small-small btn-danger pull-right button-delete button-delete-transitions" data-bind="visible: canBeDalete, css: {'delete-access': deleteAccess}, click: function(oAccount) { $root.deleteAccount(oAccount); }">
|
||||||
<span class="i18n" data-i18n-text="SETTINGS_ACCOUNTS/DELETING_ASK"></span>
|
<span class="i18n" data-i18n-text="SETTINGS_ACCOUNTS/DELETING_ASK"></span>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,8 @@ TITLE_LANGUAGES = "Sprache auswählen"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Konto hinzufügen?"
|
TITLE_ADD_ACCOUNT = "Konto hinzufügen?"
|
||||||
BUTTON_ADD_ACCOUNT = "Hinzufügen"
|
BUTTON_ADD_ACCOUNT = "Hinzufügen"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Identität hinzufügen?"
|
TITLE_ADD_IDENTITY = "Identität hinzufügen?"
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,8 @@ TITLE_LANGUAGES = "Choose language"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Add Account?"
|
TITLE_ADD_ACCOUNT = "Add Account?"
|
||||||
BUTTON_ADD_ACCOUNT = "Add"
|
BUTTON_ADD_ACCOUNT = "Add"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Add Identity?"
|
TITLE_ADD_IDENTITY = "Add Identity?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "Seleccionar idioma"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Añadir cuenta"
|
TITLE_ADD_ACCOUNT = "Añadir cuenta"
|
||||||
BUTTON_ADD_ACCOUNT = "Añadir"
|
BUTTON_ADD_ACCOUNT = "Añadir"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "¿Añadir Identidad?"
|
TITLE_ADD_IDENTITY = "¿Añadir Identidad?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "Choisir la langue"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Ajouter un compte ?"
|
TITLE_ADD_ACCOUNT = "Ajouter un compte ?"
|
||||||
BUTTON_ADD_ACCOUNT = "Ajouter"
|
BUTTON_ADD_ACCOUNT = "Ajouter"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Ajouter une identité ?"
|
TITLE_ADD_IDENTITY = "Ajouter une identité ?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "Nyelv kiválasztás"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Új fiók?"
|
TITLE_ADD_ACCOUNT = "Új fiók?"
|
||||||
BUTTON_ADD_ACCOUNT = "Hozzáadás"
|
BUTTON_ADD_ACCOUNT = "Hozzáadás"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Új identitás?"
|
TITLE_ADD_IDENTITY = "Új identitás?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "Choose language"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Bæta við aðgangi?"
|
TITLE_ADD_ACCOUNT = "Bæta við aðgangi?"
|
||||||
BUTTON_ADD_ACCOUNT = "Bæta við"
|
BUTTON_ADD_ACCOUNT = "Bæta við"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Add Identity?"
|
TITLE_ADD_IDENTITY = "Add Identity?"
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,8 @@ TITLE_LANGUAGES = "Seleziona lingua"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Aggiungere un account?"
|
TITLE_ADD_ACCOUNT = "Aggiungere un account?"
|
||||||
BUTTON_ADD_ACCOUNT = "Aggiungi"
|
BUTTON_ADD_ACCOUNT = "Aggiungi"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Aggiungere un identità?"
|
TITLE_ADD_IDENTITY = "Aggiungere un identità?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "言語を選択"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "アカウントを追加しますか?"
|
TITLE_ADD_ACCOUNT = "アカウントを追加しますか?"
|
||||||
BUTTON_ADD_ACCOUNT = "追加"
|
BUTTON_ADD_ACCOUNT = "追加"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "メールの表示名を追加しますか?"
|
TITLE_ADD_IDENTITY = "メールの表示名を追加しますか?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "사용할 언어를 선택하세요"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "새 사용자 추가?"
|
TITLE_ADD_ACCOUNT = "새 사용자 추가?"
|
||||||
BUTTON_ADD_ACCOUNT = "추가"
|
BUTTON_ADD_ACCOUNT = "추가"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "새 서명 추가?"
|
TITLE_ADD_IDENTITY = "새 서명 추가?"
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,8 @@ TITLE_LANGUAGES = "Pasirinkite kalbą"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Pridėti paskyrą?"
|
TITLE_ADD_ACCOUNT = "Pridėti paskyrą?"
|
||||||
BUTTON_ADD_ACCOUNT = "Pridėti"
|
BUTTON_ADD_ACCOUNT = "Pridėti"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Pridėti tapatybę?"
|
TITLE_ADD_IDENTITY = "Pridėti tapatybę?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "Choose language"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Pievienot kontu?"
|
TITLE_ADD_ACCOUNT = "Pievienot kontu?"
|
||||||
BUTTON_ADD_ACCOUNT = "Pievienot"
|
BUTTON_ADD_ACCOUNT = "Pievienot"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Add Identity?"
|
TITLE_ADD_IDENTITY = "Add Identity?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "Kies uw taal"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Account toevoegen?"
|
TITLE_ADD_ACCOUNT = "Account toevoegen?"
|
||||||
BUTTON_ADD_ACCOUNT = "Toevoegen"
|
BUTTON_ADD_ACCOUNT = "Toevoegen"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Identiteit toevoegen?"
|
TITLE_ADD_IDENTITY = "Identiteit toevoegen?"
|
||||||
|
|
|
||||||
|
|
@ -232,6 +232,8 @@ TITLE_LANGUAGES = "Velg språk"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Legg til konto?"
|
TITLE_ADD_ACCOUNT = "Legg til konto?"
|
||||||
BUTTON_ADD_ACCOUNT = "Legg til"
|
BUTTON_ADD_ACCOUNT = "Legg til"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Legg til identitet?"
|
TITLE_ADD_IDENTITY = "Legg til identitet?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "Wybierz język"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Dodawanie konta"
|
TITLE_ADD_ACCOUNT = "Dodawanie konta"
|
||||||
BUTTON_ADD_ACCOUNT = "Dodaj"
|
BUTTON_ADD_ACCOUNT = "Dodaj"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Dodawanie tożsamości"
|
TITLE_ADD_IDENTITY = "Dodawanie tożsamości"
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,8 @@ TITLE_LANGUAGES = "Escolha o idioma"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Nova conta"
|
TITLE_ADD_ACCOUNT = "Nova conta"
|
||||||
BUTTON_ADD_ACCOUNT = "Adicionar"
|
BUTTON_ADD_ACCOUNT = "Adicionar"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Adicionar identidade"
|
TITLE_ADD_IDENTITY = "Adicionar identidade"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "Escolha a linguagem"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Adicionar conta?"
|
TITLE_ADD_ACCOUNT = "Adicionar conta?"
|
||||||
BUTTON_ADD_ACCOUNT = "Adicionar"
|
BUTTON_ADD_ACCOUNT = "Adicionar"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Adicionar identidade?"
|
TITLE_ADD_IDENTITY = "Adicionar identidade?"
|
||||||
|
|
|
||||||
|
|
@ -232,6 +232,8 @@ TITLE_LANGUAGES = "Limbă"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Adăugați un cont"
|
TITLE_ADD_ACCOUNT = "Adăugați un cont"
|
||||||
BUTTON_ADD_ACCOUNT = "Adaugă"
|
BUTTON_ADD_ACCOUNT = "Adaugă"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Adăugați un profil"
|
TITLE_ADD_IDENTITY = "Adăugați un profil"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "Выберите язык"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Добавить ещё аккаунт?"
|
TITLE_ADD_ACCOUNT = "Добавить ещё аккаунт?"
|
||||||
BUTTON_ADD_ACCOUNT = "Добавить"
|
BUTTON_ADD_ACCOUNT = "Добавить"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Добавить Профиль?"
|
TITLE_ADD_IDENTITY = "Добавить Профиль?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "Zvoľte jazyk"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Pridať účet?"
|
TITLE_ADD_ACCOUNT = "Pridať účet?"
|
||||||
BUTTON_ADD_ACCOUNT = "Pridať"
|
BUTTON_ADD_ACCOUNT = "Pridať"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Pridať Identitu?"
|
TITLE_ADD_IDENTITY = "Pridať Identitu?"
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,8 @@ TITLE_LANGUAGES = "Välj språk"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Lägg till konto?"
|
TITLE_ADD_ACCOUNT = "Lägg till konto?"
|
||||||
BUTTON_ADD_ACCOUNT = "Lägg till"
|
BUTTON_ADD_ACCOUNT = "Lägg till"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Lägg till identitet"
|
TITLE_ADD_IDENTITY = "Lägg till identitet"
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,8 @@ TITLE_LANGUAGES = "Dil Seçimi"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Hesap Ekle?"
|
TITLE_ADD_ACCOUNT = "Hesap Ekle?"
|
||||||
BUTTON_ADD_ACCOUNT = "Ekle"
|
BUTTON_ADD_ACCOUNT = "Ekle"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Kimlik Ekle?"
|
TITLE_ADD_IDENTITY = "Kimlik Ekle?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "Виберіть мову"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "Додати ще акаунт?"
|
TITLE_ADD_ACCOUNT = "Додати ще акаунт?"
|
||||||
BUTTON_ADD_ACCOUNT = "Додати"
|
BUTTON_ADD_ACCOUNT = "Додати"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "Додати Профіль?"
|
TITLE_ADD_IDENTITY = "Додати Профіль?"
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,8 @@ TITLE_LANGUAGES = "选择语言"
|
||||||
[POPUPS_ADD_ACCOUNT]
|
[POPUPS_ADD_ACCOUNT]
|
||||||
TITLE_ADD_ACCOUNT = "添加账户?"
|
TITLE_ADD_ACCOUNT = "添加账户?"
|
||||||
BUTTON_ADD_ACCOUNT = "添加"
|
BUTTON_ADD_ACCOUNT = "添加"
|
||||||
|
TITLE_UPDATE_ACCOUNT = "Update Account?"
|
||||||
|
BUTTON_UPDATE_ACCOUNT = "Update"
|
||||||
|
|
||||||
[POPUPS_IDENTITIES]
|
[POPUPS_IDENTITIES]
|
||||||
TITLE_ADD_IDENTITY = "添加签名?"
|
TITLE_ADD_IDENTITY = "添加签名?"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue