mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-09-01 21:49:21 +03:00
Small improvements
This commit is contained in:
parent
5123841540
commit
c99a46a118
29 changed files with 459 additions and 26 deletions
|
|
@ -49,6 +49,11 @@ class Filter
|
|||
*/
|
||||
private $sActionValueThird;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $sActionValueFourth;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
|
|
@ -89,6 +94,7 @@ class Filter
|
|||
$this->sActionValue = '';
|
||||
$this->sActionValueSecond = '';
|
||||
$this->sActionValueThird = '';
|
||||
$this->sActionValueFourth = '';
|
||||
|
||||
$this->bMarkAsRead = false;
|
||||
$this->bKeep = true;
|
||||
|
|
@ -167,6 +173,14 @@ class Filter
|
|||
return $this->sActionValueThird;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function ActionValueFourth()
|
||||
{
|
||||
return $this->sActionValueFourth;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
|
|
@ -236,6 +250,7 @@ class Filter
|
|||
$this->sActionValue = isset($aFilter['ActionValue']) ? $aFilter['ActionValue'] : '';
|
||||
$this->sActionValueSecond = isset($aFilter['ActionValueSecond']) ? $aFilter['ActionValueSecond'] : '';
|
||||
$this->sActionValueThird = isset($aFilter['ActionValueThird']) ? $aFilter['ActionValueThird'] : '';
|
||||
$this->sActionValueFourth = isset($aFilter['ActionValueFourth']) ? $aFilter['ActionValueFourth'] : '';
|
||||
|
||||
$this->bKeep = isset($aFilter['Keep']) ? '1' === (string) $aFilter['Keep'] : true;
|
||||
$this->bStop = isset($aFilter['Stop']) ? '1' === (string) $aFilter['Stop'] : true;
|
||||
|
|
@ -276,6 +291,7 @@ class Filter
|
|||
'ActionValue' => $this->ActionValue(),
|
||||
'ActionValueSecond' => $this->ActionValueSecond(),
|
||||
'ActionValueThird' => $this->ActionValueThird(),
|
||||
'ActionValueFourth' => $this->ActionValueFourth(),
|
||||
'Keep' => $this->Keep(),
|
||||
'Stop' => $this->Stop(),
|
||||
'MarkAsRead' => $this->MarkAsRead()
|
||||
|
|
|
|||
|
|
@ -350,6 +350,7 @@ class SieveStorage implements \RainLoop\Providers\Filters\FiltersInterface
|
|||
$sValue = \trim($oFilter->ActionValue());
|
||||
$sValueSecond = \trim($oFilter->ActionValueSecond());
|
||||
$sValueThird = \trim($oFilter->ActionValueThird());
|
||||
$sValueFourth = \trim($oFilter->ActionValueFourth());
|
||||
if (0 < \strlen($sValue))
|
||||
{
|
||||
$aCapa['vacation'] = true;
|
||||
|
|
@ -367,8 +368,24 @@ class SieveStorage implements \RainLoop\Providers\Filters\FiltersInterface
|
|||
$iDays = (int) $sValueThird;
|
||||
}
|
||||
|
||||
$aResult[] = $sTab.'vacation :days '.$iDays.' '.$sSubject.'"'.$this->quote($sValue).'";';
|
||||
$sAddresses = '';
|
||||
if (0 < \strlen($sValueFourth))
|
||||
{
|
||||
$self = $this;
|
||||
|
||||
$aAddresses = \explode(',', $sValueFourth);
|
||||
$aAddresses = \array_filter(\array_map(function ($sEmail) use ($self) {
|
||||
$sEmail = \trim($sEmail);
|
||||
return 0 < \strlen($sEmail) ? '"'.$self->quote($sEmail).'"' : '';
|
||||
}, $aAddresses), 'strlen');
|
||||
|
||||
if (0 < \count($aAddresses))
|
||||
{
|
||||
$sAddresses = ':addresses ['.\implode(', ', $aAddresses).'] ';
|
||||
}
|
||||
}
|
||||
|
||||
$aResult[] = $sTab.'vacation :days '.$iDays.' '.$sAddresses.$sSubject.'"'.$this->quote($sValue).'";';
|
||||
if ($oFilter->Stop())
|
||||
{
|
||||
$aResult[] = $sTab.'stop;';
|
||||
|
|
@ -523,7 +540,7 @@ class SieveStorage implements \RainLoop\Providers\Filters\FiltersInterface
|
|||
*
|
||||
* @return string
|
||||
*/
|
||||
private function quote($sValue)
|
||||
public function quote($sValue)
|
||||
{
|
||||
return \str_replace(array('\\', '"'), array('\\\\', '\\"'), \trim($sValue));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -266,6 +266,7 @@ class Service
|
|||
'{{BaseAppOpenPgpScriptLink}}' => $aData['OpenPgpJsLink'],
|
||||
'{{BaseAppMainCommonScriptLink}}' => $aData['AppJsCommonLink'],
|
||||
'{{BaseAppMainScriptLink}}' => $aData['AppJsLink'],
|
||||
'{{BaseVersion}}' => APP_VERSION,
|
||||
'{{BaseDir}}' => 'ltr'
|
||||
// '{{BaseDir}}' => \in_array($aData['Language'], array('ar', 'he', 'ur')) ? 'rtl' : 'ltr'
|
||||
);
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
<meta name="Author" content="RainLoop Team" />
|
||||
<meta name="robots" content="noindex,nofollow,noodp" />
|
||||
<meta name="google" content="notranslate" />
|
||||
<meta name="app-version" content="{{BaseVersion}}" id="rlAppVersion" />
|
||||
<title></title>
|
||||
<style>#rl-content{display:none;}</style>
|
||||
<link rel="shortcut icon" href="{{BaseAppFaviconPngFile}}" type="image/png" />
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
<div class="btn-group" data-bind="visible: allowMessageListActions">
|
||||
<a class="btn first btn-dark-disabled-border button-archive" data-tooltip-join="top"
|
||||
data-bind="visible: isArchiveVisible, command: archiveCommand, tooltip: 'MESSAGE_LIST/BUTTON_ARCHIVE'">
|
||||
<i class="icon-archive"></i>
|
||||
<svg-icon params="icon: 'archive'"></svg-icon>
|
||||
</a>
|
||||
<a class="btn btn-dark-disabled-border button-spam" data-tooltip-join="top"
|
||||
data-bind="visible: isSpamVisible, command: spamCommand, tooltip: 'MESSAGE_LIST/BUTTON_SPAM',
|
||||
|
|
@ -46,7 +46,7 @@
|
|||
<a class="btn last btn-dark-disabled-border button-delete" data-tooltip-join="top"
|
||||
data-bind="command: deleteCommand, tooltip: 'MESSAGE_LIST/BUTTON_DELETE',
|
||||
css: {'first': !isArchiveVisible() && !isSpamVisible() && !isUnSpamVisible()}">
|
||||
<i class="icon-trash"></i>
|
||||
<svg-icon params="icon: 'trash'"></svg-icon>
|
||||
<!--<span data-bind="text: printableMessageCountForDeletion()"></span>-->
|
||||
</a>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
</div>
|
||||
<br />
|
||||
<a class="btn" data-bind="click: addCondition, i18nInit: true">
|
||||
<i class="icon-plus"></i>
|
||||
<svg-icon params="icon: 'plus'"></svg-icon>
|
||||
|
||||
<span class="i18n" data-i18n="POPUPS_FILTER/BUTTON_ADD_CONDITION"></span>
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
<div class="row" data-bind="visible: inited() && !serverError()">
|
||||
<div class="span5">
|
||||
<a class="btn" data-bind="click: addFilter">
|
||||
<i class="icon-plus"></i>
|
||||
<svg-icon params="icon: 'plus'"></svg-icon>
|
||||
|
||||
<span class="i18n" data-i18n="SETTINGS_FILTERS/BUTTON_ADD_FILTER"></span>
|
||||
</a>
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
</td>
|
||||
<td>
|
||||
<span class="delete-filter" data-bind="visible: !deleteAccess() && canBeDeleted(), click: function (oFilter) { $root.filterForDeletion(oFilter); }">
|
||||
<i class="icon-trash"></i>
|
||||
<svg-icon params="icon: 'trash'"></svg-icon>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -9,6 +9,19 @@
|
|||
size: 1
|
||||
}
|
||||
}"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" data-bind="css: {'error': actionValueFourth.error}" style="margin-bottom: 0">
|
||||
<div class="controls">
|
||||
<input type="text" class="span5 i18n" data-bind="value: actionValueFourth"
|
||||
data-i18n="[placeholder]POPUPS_FILTER/VACATION_RECIPIENTS_LABEL" />
|
||||
<button class="btn setRecipientsBtn" data-bind="click: setRecipients">
|
||||
<svg-icon params="icon: 'plus'"></svg-icon>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group" style="margin-bottom: 0">
|
||||
<div class="controls">
|
||||
<input type="text" class="span5 i18n" data-bind="value: actionValueSecond"
|
||||
data-i18n="[placeholder]POPUPS_FILTER/VACATION_SUBJECT_LABEL" />
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -7,6 +7,6 @@
|
|||
|
||||
<span class="delete-action button-delete pull-right" style="margin-top: 5px;"
|
||||
data-bind="click: function (oCondition) { $root.removeCondition(oCondition); }">
|
||||
<i class="icon-trash"></i>
|
||||
<svg-icon params="icon: 'trash'"></svg-icon>
|
||||
</span>
|
||||
</div>
|
||||
|
|
@ -9,6 +9,6 @@
|
|||
|
||||
<span class="delete-action button-delete pull-right" style="margin-top: 5px;"
|
||||
data-bind="click: function (oCondition) { $root.removeCondition(oCondition); }">
|
||||
<i class="icon-trash"></i>
|
||||
<svg-icon params="icon: 'trash'"></svg-icon>
|
||||
</span>
|
||||
</div>
|
||||
|
|
@ -7,6 +7,6 @@
|
|||
|
||||
<span class="delete-action button-delete pull-right" style="margin-top: 5px;"
|
||||
data-bind="click: function (oCondition) { $root.removeCondition(oCondition); }">
|
||||
<i class="icon-trash"></i>
|
||||
<svg-icon params="icon: 'trash'"></svg-icon>
|
||||
</span>
|
||||
</div>
|
||||
|
|
@ -14,15 +14,15 @@
|
|||
</td>
|
||||
<td class="delete-folder-parent">
|
||||
<span class="delete-folder" data-bind="visible: canBeDeleted() && !deleteAccess(), click: function (oFolder) { $root.folderForDeletion(oFolder); }">
|
||||
<i class="icon-trash"></i>
|
||||
<svg-icon params="icon: 'trash'"></svg-icon>
|
||||
</span>
|
||||
</td>
|
||||
<td class="subscribe-folder-parent">
|
||||
<span class="unsubscribe-folder" data-bind="visible: canBeSubScribed() && !subScribed(), click: function(oFolder) { $root.subscribeFolder(oFolder); }">
|
||||
<i class="icon-eye"></i>
|
||||
<svg-icon params="icon: 'eye'"></svg-icon>
|
||||
</span>
|
||||
<span class="subscribe-folder" data-bind="visible: canBeSubScribed() && subScribed(), click: function(oFolder) { $root.unSubscribeFolder(oFolder); }">
|
||||
<i class="icon-eye"></i>
|
||||
<svg-icon params="icon: 'eye'"></svg-icon>
|
||||
</span>
|
||||
</td>
|
||||
<td class="check-folder-parent" data-bind="visible: $root.displaySpecSetting">
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
<div style="display: inline-block" data-tooltip-join="left" data-bind="tooltip: isHttps ? '' : 'SETTINGS_OPEN_PGP/GENERATE_ONLY_HTTPS'">
|
||||
<button class="btn" data-bind="click: generateOpenPgpKey, disable: !isHttps">
|
||||
<i class="icon-key"></i>
|
||||
<svg-icon params="icon: 'key'"></svg-icon>
|
||||
|
||||
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/BUTTON_GENERATE_OPEN_PGP_KEYS"></span>
|
||||
</button>
|
||||
|
|
@ -30,7 +30,7 @@
|
|||
<!-- ko foreach: openpgpkeysPrivate -->
|
||||
<tr class="open-pgp-key-item">
|
||||
<td>
|
||||
<i class="open-pgp-key-img icon-lock i18n" data-i18n="[title]SETTINGS_OPEN_PGP/TITLE_PRIVATE"></i>
|
||||
<span class="open-pgp-key-img i18n" data-i18n="[title]SETTINGS_OPEN_PGP/TITLE_PRIVATE"><svg-icon params="icon: 'lock'"></svg-icon></span>
|
||||
<span class="open-pgp-key-user" data-bind="text: user"></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(oOpenPGP) { $root.deleteOpenPgpKey(oOpenPGP); }">
|
||||
<span class="i18n" data-i18n="SETTINGS_OPEN_PGP/DELETING_ASK"></span>
|
||||
|
|
@ -38,12 +38,12 @@
|
|||
</td>
|
||||
<td>
|
||||
<span class="delete-open-pgp-key" data-bind="visible: !deleteAccess(), click: function (oOpenPGP) { $root.openPgpKeyForDeletion(oOpenPGP); }">
|
||||
<i class="icon-trash"></i>
|
||||
<svg-icon params="icon: 'trash'"></svg-icon>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="view-open-pgp-key" data-bind="click: function (oOpenPgpKey) { $root.viewOpenPgpKey(oOpenPgpKey); }">
|
||||
<i class="icon-eye"></i>
|
||||
<svg-icon params="icon: 'eye'"></svg-icon>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -51,7 +51,7 @@
|
|||
<!-- ko foreach: openpgpkeysPublic -->
|
||||
<tr class="open-pgp-key-item">
|
||||
<td>
|
||||
<span class="open-pgp-key-img icon-key i18n" data-i18n="[title]SETTINGS_OPEN_PGP/TITLE_PUBLIC"></span>
|
||||
<span class="open-pgp-key-img i18n" data-i18n="[title]SETTINGS_OPEN_PGP/TITLE_PUBLIC"><svg-icon params="icon: 'key'"></svg-icon></span>
|
||||
<span class="open-pgp-key-user" data-bind="text: user"></span>
|
||||
(<span class="open-pgp-key-id" data-bind="text: id"></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(oOpenPGP) { $root.deleteOpenPgpKey(oOpenPGP); }">
|
||||
|
|
@ -60,12 +60,12 @@
|
|||
</td>
|
||||
<td>
|
||||
<span class="delete-open-pgp-key" data-bind="visible: !deleteAccess(), click: function (oOpenPgpKey) { $root.openPgpKeyForDeletion(oOpenPgpKey); }">
|
||||
<i class="icon-trash"></i>
|
||||
<svg-icon params="icon: 'trash'"></svg-icon>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="view-open-pgp-key" data-bind="click: function (oOpenPgpKey) { $root.viewOpenPgpKey(oOpenPgpKey); }">
|
||||
<i class="icon-eye"></i>
|
||||
<svg-icon params="icon: 'eye'"></svg-icon>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -369,6 +369,7 @@ STOP_LABEL = "Don't stop processing rules"
|
|||
EMAIL_LABEL = "Email"
|
||||
VACATION_SUBJECT_LABEL = "Subject (optional)"
|
||||
VACATION_MESSAGE_LABEL = "Message"
|
||||
VACATION_RECIPIENTS_LABEL = "Recipients (comma separated)"
|
||||
REJECT_MESSAGE_LABEL = "Reject message"
|
||||
ALL_INCOMING_MESSAGES_DESC = "All incoming messages"
|
||||
|
||||
|
|
@ -654,6 +655,7 @@ NO_PUBLIC_KEYS_FOUND = "No public keys found"
|
|||
NO_PUBLIC_KEYS_FOUND_FOR = "No public keys found for \"%EMAIL%\" email"
|
||||
NO_PRIVATE_KEY_FOUND = "No private key found"
|
||||
NO_PRIVATE_KEY_FOUND_FOR = "No private key found for \"%EMAIL%\" email"
|
||||
ADD_A_PUBLICK_KEY = "Add a public key"
|
||||
UNVERIFIRED_SIGNATURE = "Unverified signature"
|
||||
DECRYPTION_ERROR = "OpenPGP decryption error"
|
||||
GOOD_SIGNATURE = "Good signature from %USER%"
|
||||
|
|
|
|||
0
rainloop/v/0.0.0/static/css/fonts/.gitempty
Normal file
0
rainloop/v/0.0.0/static/css/fonts/.gitempty
Normal file
0
rainloop/v/0.0.0/static/css/svg/.gitempty
Normal file
0
rainloop/v/0.0.0/static/css/svg/.gitempty
Normal file
7
rainloop/v/0.0.0/static/css/svg/icons.svg
Normal file
7
rainloop/v/0.0.0/static/css/svg/icons.svg
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||
|
||||
<symbol id="svg-icon-plus" viewBox="0 0 512 512">
|
||||
<path d="m288 224l0-128-64 0 0 128-128 0 0 64 128 0 0 128 64 0 0-128 128 0 0-64z"/>
|
||||
</symbol>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 235 B |
Loading…
Add table
Add a link
Reference in a new issue