Small improvements

This commit is contained in:
RainLoop Team 2015-07-29 22:13:49 +04:00
parent 5123841540
commit c99a46a118
29 changed files with 459 additions and 26 deletions

View file

@ -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()

View file

@ -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));
}

View file

@ -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'
);

View file

@ -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" />

View file

@ -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>

View file

@ -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>
&nbsp;&nbsp;
<span class="i18n" data-i18n="POPUPS_FILTER/BUTTON_ADD_CONDITION"></span>
</a>

View file

@ -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>
&nbsp;&nbsp;
<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>

View file

@ -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>

View file

@ -7,6 +7,6 @@
&nbsp;
<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>

View file

@ -9,6 +9,6 @@
&nbsp;
<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>

View file

@ -7,6 +7,6 @@
&nbsp;
<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>

View file

@ -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">

View file

@ -12,7 +12,7 @@
&nbsp;&nbsp;
<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>
&nbsp;&nbsp;
<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>

View file

@ -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%"

View 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