Sieve filters (interface/vacation action)

This commit is contained in:
RainLoop Team 2015-01-20 01:20:12 +04:00
parent 54edeaa645
commit 68cc322bd5
26 changed files with 235 additions and 104 deletions

View file

@ -39,6 +39,11 @@ class Filter
*/
private $sActionValue;
/**
* @var string
*/
private $sActionValueSecond;
/**
* @var bool
*/
@ -72,6 +77,7 @@ class Filter
$this->sActionType = \RainLoop\Providers\Filters\Enumerations\ActionType::MOVE_TO;
$this->sActionValue = '';
$this->sActionValueSecond = '';
$this->bMarkAsRead = false;
$this->bSkipOthers = false;
@ -134,6 +140,14 @@ class Filter
return $this->sActionValue;
}
/**
* @return string
*/
public function ActionValueSecond()
{
return $this->sActionValueSecond;
}
/**
* @return bool
*/
@ -201,6 +215,7 @@ class Filter
\RainLoop\Providers\Filters\Enumerations\ActionType::MOVE_TO;
$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;
@ -239,6 +254,7 @@ class Filter
'ConditionsType' => $this->ConditionsType(),
'ActionType' => $this->ActionType(),
'ActionValue' => $this->ActionValue(),
'ActionValueSecond' => $this->ActionValueSecond(),
'MarkAsRead' => $this->MarkAsRead(),
'SkipOthers' => $this->SkipOthers()
);

View file

@ -7,5 +7,6 @@ class ActionType
const NONE = 'None';
const MOVE_TO = 'MoveTo';
const DISCARD = 'Discard';
const VACATION = 'Vacation';
const FORWARD = 'Forward';
}

View file

@ -195,6 +195,28 @@ class SieveStorage implements \RainLoop\Providers\Filters\FiltersInterface
$aResult[] = $sTab.'discard;';
$aResult[] = $sTab.'stop;';
break;
case \RainLoop\Providers\Filters\Enumerations\ActionType::VACATION:
$sValue = \trim($oFilter->ActionValue());
$sValueSecond = \trim($oFilter->ActionValueSecond());
if (0 < \strlen($sValue))
{
$aCapa['vacation'] = true;
$sSubject = '';
if (0 < \strlen($sValueSecond))
{
$sSubject = ':subject "'.$this->quote(
\preg_replace('/[\s]+/u', ' ', $sValueSecond)).'" ';
}
$aResult[] = $sTab.'vacation :days 1 '.$sSubject.'"'.$this->quote($sValue).'";';
$aResult[] = $sTab.'stop;';
}
else
{
$aResult[] = $sTab.'# @Error (vacation): empty action value';
}
break;
case \RainLoop\Providers\Filters\Enumerations\ActionType::FORWARD:
$sValue = $oFilter->ActionValue();
if (0 < \strlen($sValue))

View file

@ -14,7 +14,7 @@
<div class="control-group" data-bind="css: {'error': name.error}">
<div class="controls">
<input type="text" class="span5" data-bind="value: name, hasFocus: name.focused" placeholder="Name"
<input type="text" class="span5" data-bind="value: name, hasFocus: name.focused" placeholder="Name @i18n"
autocorrect="off" autocapitalize="off" spellcheck="false" />
</div>
</div>
@ -51,17 +51,10 @@
<br />
<div class="legend">
<span>
Actions
Actions @i18n
</span>
</div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'Mark as read @i18n',
value: actionMarkAsRead
}
}"></div>
<br />
<select data-bind="options: $root.actionTypeOptions, value: actionType, optionsText: 'name', optionsValue: 'id'"></select>
<div data-bind="template: {'name': actionTemplate()}"></div>
</div>
</div>

View file

@ -42,6 +42,8 @@
</td>
<td class="e-action">
<span class="filter-name" data-bind="text: name()"></span>
&nbsp;
<span class="filter-sub-name" data-bind="text: nameSub()"></span>
</td>
<td>
<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(oFilter) { $root.deleteFilter(oFilter); }">

View file

@ -1,11 +1,23 @@
<select data-bind="options: $root.actionTypeOptions, value: actionType, optionsText: 'name', optionsValue: 'id'"></select>
&nbsp;
<input type="text" data-bind="value: actionValue" />
&nbsp;
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'keep in INBOX @i18n',
value: keepForward
}
}"></div>
<div class="control-group" data-bind="css: {'error': actionValue.error}">
<div class="controls">
<input type="text" data-bind="value: actionValue" placeholder="Email @i18n" />
</div>
</div>
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'keep in INBOX @i18n',
value: keepForward
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'Mark as read @i18n',
value: actionMarkAsRead
}
}"></div>
</div>
</div>

View file

@ -0,0 +1,17 @@
<div class="control-group" data-bind="css: {'error': actionValue.error}">
<div class="controls">
<select data-bind="options: $root.folderSelectList, value: $root.selectedFolderValue,
optionsText: 'name', optionsValue: 'id', optionsAfterRender: $root.defautOptionsAfterRender"></select>
</div>
</div>
<div class="control-group">
<div class="controls">
<div data-bind="component: {
name: 'Checkbox',
params: {
label: 'Mark as read @i18n',
value: actionMarkAsRead
}
}"></div>
</div>
</div>

View file

@ -1 +0,0 @@
<select data-bind="options: $root.actionTypeOptions, value: actionType, optionsText: 'name', optionsValue: 'id'"></select>

View file

@ -0,0 +1,11 @@
<br />
<div class="control-group">
<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="controls">
<textarea class="span5" data-bind="value: actionValue" style="height: 100px;" placeholder="Message @i18n"></textarea>
</div>
</div>

View file

@ -1,4 +0,0 @@
<select data-bind="options: $root.actionTypeOptions, value: actionType, optionsText: 'name', optionsValue: 'id'"></select>
&nbsp;
<select data-bind="options: $root.folderSelectList, value: $root.selectedFolderValue,
optionsText: 'name', optionsValue: 'id', optionsAfterRender: $root.defautOptionsAfterRender"></select>

View file

@ -1,3 +0,0 @@
<select data-bind="options: $root.actionTypeOptions, value: actionType, optionsText: 'name', optionsValue: 'id'"></select>
&nbsp;
<input type="text" data-bind="value: actionValue" />