Sieve filters (interface)

This commit is contained in:
RainLoop Team 2015-01-22 00:15:40 +04:00
parent 68cc322bd5
commit 02ba68868f
12 changed files with 129 additions and 30 deletions

View file

@ -2063,7 +2063,6 @@ class Actions
*/
public function DoFiltersSave()
{
sleep(1);
$aIncFilters = $this->GetActionParam('Filters', array());
$aFilters = array();

View file

@ -217,9 +217,9 @@ class Filter
$this->sActionValue = isset($aFilter['ActionValue']) ? $aFilter['ActionValue'] : '';
$this->sActionValueSecond = isset($aFilter['ActionValueSecond']) ? $aFilter['ActionValueSecond'] : '';
$this->bMarkAsRead = isset($aFilter['MarkAsRead']) ? $aFilter['MarkAsRead'] : false;
$this->bSkipOthers = isset($aFilter['SkipOthers']) ? $aFilter['SkipOthers'] : false;
$this->bKeepForward = isset($aFilter['KeepForward']) ? $aFilter['KeepForward'] : true;
$this->bMarkAsRead = isset($aFilter['MarkAsRead']) ? '1' === (string) $aFilter['MarkAsRead'] : false;
$this->bSkipOthers = isset($aFilter['SkipOthers']) ? '1' === (string) $aFilter['SkipOthers'] : false;
$this->bKeepForward = isset($aFilter['KeepForward']) ? '1' === (string) $aFilter['KeepForward'] : true;
$this->aConditions = \RainLoop\Providers\Filters\Classes\FilterCondition::CollectionFromJSON(
isset($aFilter['Conditions']) ? $aFilter['Conditions'] : array());

View file

@ -180,7 +180,11 @@ class SieveStorage implements \RainLoop\Providers\Filters\FiltersInterface
$sTab = '';
}
if ($oFilter->MarkAsRead())
if ($oFilter->MarkAsRead() && \in_array($oFilter->ActionType(), array(
\RainLoop\Providers\Filters\Enumerations\ActionType::NONE,
\RainLoop\Providers\Filters\Enumerations\ActionType::MOVE_TO,
\RainLoop\Providers\Filters\Enumerations\ActionType::FORWARD
)))
{
$aCapa['imap4flags'] = true;
$aResult[] = $sTab.'addflag "\\\\Seen";';
@ -353,6 +357,6 @@ class SieveStorage implements \RainLoop\Providers\Filters\FiltersInterface
*/
private function quote($sValue)
{
return \str_replace('"', '\\"', \trim($sValue));
return \str_replace(array('\\', '"'), array('\\\\', '\\"'), \trim($sValue));
}
}

View file

@ -280,7 +280,7 @@
  
<span class="i18n text" data-i18n-text="MESSAGE/BUTTON_SHOW_IMAGES"></span>
</div>
<div class="readReceipt" data-bind="visible: message() && '' !== message().readReceipt() && !message().isReadReceipt(), click: function() { readReceipt(message()); }">
<div class="readReceipt" data-bind="visible: message() && !isDraftOrSentFolder() && '' !== message().readReceipt() && !message().isReadReceipt(), click: function() { readReceipt(message()); }">
<i class="icon-mail"></i>
&nbsp;&nbsp;
<span class="i18n text" data-i18n-text="MESSAGE/BUTTON_NOTIFY_READ_RECEIPT"></span>

View file

@ -19,6 +19,16 @@
</a>
</div>
</div>
<div class="row" data-bind="visible: haveChanges">
<div class="span8">
<br />
<div class="alert g-ui-user-select-none" style="margin-bottom: 0">
<i class="icon-warning"></i>
&nbsp;&nbsp;
These changes need to be saved to the server. @i18n
</div>
</div>
</div>
<div class="row">
<div class="span8">
<div class="process-place g-ui-user-select-none" data-bind="style: {'visibility': visibility }">

View file

@ -1,10 +1,9 @@
<br />
<div class="control-group">
<div class="control-group" style="margin-bottom: 0">
<div class="controls">
<input type="text" class="span5" data-bind="value: actionValueSecond" placeholder="Subject (optional) @i18n" />
</div>
</div>
<div class="control-group" data-bind="css: {'error': actionValue.error}">
<div class="control-group" data-bind="css: {'error': actionValue.error}" style="margin-bottom: 0">
<div class="controls">
<textarea class="span5" data-bind="value: actionValue" style="height: 100px;" placeholder="Message @i18n"></textarea>
</div>

View file

@ -1,9 +1,11 @@
<select class="span3" data-bind="options: $root.fieldOptions, value: field, optionsText: 'name', optionsValue: 'id'"></select>
&nbsp;
<select class="span2" data-bind="options: $root.typeOptions, value: type, optionsText: 'name', optionsValue: 'id'"></select>
&nbsp;
<input class="span3" type="text" data-bind="value: value" />
&nbsp;
<span class="delete-action button-delete pull-right" data-bind="click: function (oCondition) { $root.removeCondition(oCondition); }">
<i class="icon-trash"></i>
</span>
<div class="control-group" data-bind="css: {'error': value.error}" style="margin-bottom: 0">
<select class="span3" data-bind="options: $root.fieldOptions, value: field, optionsText: 'name', optionsValue: 'id'"></select>
&nbsp;
<select class="span2" data-bind="options: $root.typeOptions, value: type, optionsText: 'name', optionsValue: 'id'"></select>
&nbsp;
<input class="span3" type="text" data-bind="value: value" />
&nbsp;
<span class="delete-action button-delete pull-right" data-bind="click: function (oCondition) { $root.removeCondition(oCondition); }">
<i class="icon-trash"></i>
</span>
</div>