djmaze 2020-11-26 12:34:54 +01:00
parent 4adc672ccd
commit 0ba7374468
14 changed files with 72 additions and 17 deletions

View file

@ -262,6 +262,7 @@ export const FilterConditionField = {
Recipient: 'Recipient',
Subject: 'Subject',
Header: 'Header',
Body: 'Body',
Size: 'Size'
};
@ -275,7 +276,9 @@ export const FilterConditionType = {
NotEqualTo: 'NotEqualTo',
Regex: 'Regex',
Over: 'Over',
Under: 'Under'
Under: 'Under',
Text: 'Text',
Raw: 'Raw'
};
/**

View file

@ -21,6 +21,9 @@ class FilterConditionModel extends AbstractModel {
this.template = ko.computed(() => {
let template = '';
switch (this.field()) {
case FilterConditionField.Body:
template = 'SettingsFiltersConditionBody';
break;
case FilterConditionField.Size:
template = 'SettingsFiltersConditionSize';
break;

View file

@ -38,6 +38,7 @@ class FilterPopupView extends AbstractViewNext {
this.fieldOptions = ko.observableArray([]);
this.typeOptions = ko.observableArray([]);
this.typeOptionsSize = ko.observableArray([]);
this.typeOptionsBody = ko.observableArray([]);
initOnStartOrLangChange(this.populateOptions.bind(this));
@ -108,7 +109,8 @@ class FilterPopupView extends AbstractViewNext {
{ 'id': FilterConditionField.Recipient, 'name': i18n('POPUPS_FILTER/SELECT_FIELD_RECIPIENTS') },
{ 'id': FilterConditionField.Subject, 'name': i18n('POPUPS_FILTER/SELECT_FIELD_SUBJECT') },
{ 'id': FilterConditionField.Size, 'name': i18n('POPUPS_FILTER/SELECT_FIELD_SIZE') },
{ 'id': FilterConditionField.Header, 'name': i18n('POPUPS_FILTER/SELECT_FIELD_HEADER') }
{ 'id': FilterConditionField.Header, 'name': i18n('POPUPS_FILTER/SELECT_FIELD_HEADER') },
{ 'id': FilterConditionField.Body, 'name': i18n('POPUPS_FILTER/SELECT_FIELD_BODY') }
]);
this.typeOptions([
@ -126,6 +128,11 @@ class FilterPopupView extends AbstractViewNext {
{ 'id': FilterConditionType.Over, 'name': i18n('POPUPS_FILTER/SELECT_TYPE_OVER') },
{ 'id': FilterConditionType.Under, 'name': i18n('POPUPS_FILTER/SELECT_TYPE_UNDER') }
]);
this.typeOptionsBody([
{ 'id': FilterConditionType.Text, 'name': i18n('POPUPS_FILTER/SELECT_TYPE_TEXT') },
{ 'id': FilterConditionType.Raw, 'name': i18n('POPUPS_FILTER/SELECT_TYPE_RAW') }
]);
}
removeCondition(oConditionToDelete) {

View file

@ -4,9 +4,11 @@ namespace RainLoop\Providers\Filters\Enumerations;
class ConditionField
{
const FROM = 'From';
const RECIPIENT = 'Recipient';
const SUBJECT = 'Subject';
const HEADER = 'Header';
const SIZE = 'Size';
const
FROM = 'From',
RECIPIENT = 'Recipient',
SUBJECT = 'Subject',
HEADER = 'Header',
BODY = 'Body',
SIZE = 'Size';
}

View file

@ -4,11 +4,14 @@ namespace RainLoop\Providers\Filters\Enumerations;
class ConditionType
{
const EQUAL_TO = 'EqualTo';
const NOT_EQUAL_TO = 'NotEqualTo';
const CONTAINS = 'Contains';
const NOT_CONTAINS = 'NotContains';
const REGEX = 'Regex';
const OVER = 'Over';
const UNDER = 'Under';
const
EQUAL_TO = 'EqualTo',
NOT_EQUAL_TO = 'NotEqualTo',
CONTAINS = 'Contains',
NOT_CONTAINS = 'NotContains',
REGEX = 'Regex',
OVER = 'Over',
UNDER = 'Under',
TEXT = 'Text',
RAW = 'Raw';
}

View file

@ -159,11 +159,11 @@ class SieveStorage implements \RainLoop\Providers\Filters\FiltersInterface
{
switch ($oCondition->Type())
{
case \RainLoop\Providers\Filters\Enumerations\ConditionType::TEXT:
case \RainLoop\Providers\Filters\Enumerations\ConditionType::RAW:
case \RainLoop\Providers\Filters\Enumerations\ConditionType::OVER:
$sTypeWord = ':over';
break;
case \RainLoop\Providers\Filters\Enumerations\ConditionType::UNDER:
$sTypeWord = ':under';
$sTypeWord = ':' . \strtolower($oCondition->Type());
break;
case \RainLoop\Providers\Filters\Enumerations\ConditionType::NOT_EQUAL_TO:
$sResult .= 'not ';
@ -199,6 +199,10 @@ class SieveStorage implements \RainLoop\Providers\Filters\FiltersInterface
case \RainLoop\Providers\Filters\Enumerations\ConditionField::HEADER:
$sResult .= 'header '.$sTypeWord.' ["'.$this->quote($sValueSecond).'"]';
break;
case \RainLoop\Providers\Filters\Enumerations\ConditionField::BODY:
// :text :raw :content
$sResult .= 'body '.$sTypeWord.' :contains';
break;
case \RainLoop\Providers\Filters\Enumerations\ConditionField::SIZE:
$sResult .= 'size '.$sTypeWord;
break;

View file

@ -323,6 +323,7 @@ en:
SELECT_FIELD_RECIPIENTS: "Recipients (To or CC)"
SELECT_FIELD_SUBJECT: "Subject"
SELECT_FIELD_HEADER: "Header"
SELECT_FIELD_BODY: "Body"
SELECT_FIELD_SIZE: "Size"
SELECT_TYPE_CONTAINS: "Contains"
SELECT_TYPE_NOT_CONTAINS: "Not Contains"
@ -334,6 +335,8 @@ en:
SELECT_TYPE_NOT_EQUAL_TO: "Not Equal To"
SELECT_TYPE_OVER: "Over"
SELECT_TYPE_UNDER: "Under"
SELECT_TYPE_TEXT: "Text"
SELECT_TYPE_RAW: "Raw"
SELECT_MATCH_ANY: "Matching ANY of the following rules"
SELECT_MATCH_ALL: "Matching ALL of the following rules"
MARK_AS_READ_LABEL: "Mark as read"

View file

@ -322,6 +322,7 @@ de_DE:
SELECT_FIELD_RECIPIENTS: "Empfänger (An oder CC)"
SELECT_FIELD_SUBJECT: "Betreff"
SELECT_FIELD_HEADER: "Nachrichtenkopf"
SELECT_FIELD_BODY: "Nachrichteninhalt"
SELECT_FIELD_SIZE: "Größe"
SELECT_TYPE_CONTAINS: "Enthält"
SELECT_TYPE_NOT_CONTAINS: "Enthält nicht"
@ -333,6 +334,8 @@ de_DE:
SELECT_TYPE_NOT_EQUAL_TO: "Ungleich"
SELECT_TYPE_OVER: "Über"
SELECT_TYPE_UNDER: "Unter"
SELECT_TYPE_TEXT: "Text"
SELECT_TYPE_RAW: "Roh"
SELECT_MATCH_ANY: "Eine der folgenden Regeln trifft zu"
SELECT_MATCH_ALL: "Alle folgenden Regeln treffen zu"
MARK_AS_READ_LABEL: "Als Gelesen markieren"

View file

@ -323,6 +323,7 @@ en_GB:
SELECT_FIELD_RECIPIENTS: "Recipients (To or CC)"
SELECT_FIELD_SUBJECT: "Subject"
SELECT_FIELD_HEADER: "Header"
SELECT_FIELD_BODY: "Body"
SELECT_FIELD_SIZE: "Size"
SELECT_TYPE_CONTAINS: "Contains"
SELECT_TYPE_NOT_CONTAINS: "Not Contains"
@ -334,6 +335,8 @@ en_GB:
SELECT_TYPE_NOT_EQUAL_TO: "Not Equal To"
SELECT_TYPE_OVER: "Over"
SELECT_TYPE_UNDER: "Under"
SELECT_TYPE_TEXT: "Text"
SELECT_TYPE_RAW: "Raw"
SELECT_MATCH_ANY: "Matching ANY of the following rules"
SELECT_MATCH_ALL: "Matching ALL of the following rules"
MARK_AS_READ_LABEL: "Mark as read"

View file

@ -323,6 +323,7 @@ en_US:
SELECT_FIELD_RECIPIENTS: "Recipients (To or CC)"
SELECT_FIELD_SUBJECT: "Subject"
SELECT_FIELD_HEADER: "Header"
SELECT_FIELD_BODY: "Body"
SELECT_FIELD_SIZE: "Size"
SELECT_TYPE_CONTAINS: "Contains"
SELECT_TYPE_NOT_CONTAINS: "Not Contains"
@ -334,6 +335,8 @@ en_US:
SELECT_TYPE_NOT_EQUAL_TO: "Not Equal To"
SELECT_TYPE_OVER: "Over"
SELECT_TYPE_UNDER: "Under"
SELECT_TYPE_TEXT: "Text"
SELECT_TYPE_RAW: "Raw"
SELECT_MATCH_ANY: "Matching ANY of the following rules"
SELECT_MATCH_ALL: "Matching ALL of the following rules"
MARK_AS_READ_LABEL: "Mark as read"

View file

@ -322,6 +322,7 @@ es_ES:
SELECT_FIELD_RECIPIENTS: "Destinatarios (A o CC)"
SELECT_FIELD_SUBJECT: "Asunto"
SELECT_FIELD_HEADER: "Encabezado"
SELECT_FIELD_BODY: "Body"
SELECT_FIELD_SIZE: "Tamaño"
SELECT_TYPE_CONTAINS: "Contiene"
SELECT_TYPE_NOT_CONTAINS: "No Contiene"
@ -333,6 +334,8 @@ es_ES:
SELECT_TYPE_NOT_EQUAL_TO: "Distinto De"
SELECT_TYPE_OVER: "Por Encima"
SELECT_TYPE_UNDER: "Por Debajo"
SELECT_TYPE_TEXT: "Texto"
SELECT_TYPE_RAW: "Crudo"
SELECT_MATCH_ANY: "Si coincide alguna de estas reglas"
SELECT_MATCH_ALL: "Si coinciden todas las reglas"
MARK_AS_READ_LABEL: "Marcar como leído"

View file

@ -323,6 +323,7 @@ fr_FR:
SELECT_FIELD_RECIPIENTS: "Destinataires (A ou CC)"
SELECT_FIELD_SUBJECT: "Sujet"
SELECT_FIELD_HEADER: "En-tête"
SELECT_FIELD_BODY: "Contenu"
SELECT_FIELD_SIZE: "Taille"
SELECT_TYPE_CONTAINS: "Contient"
SELECT_TYPE_NOT_CONTAINS: "Ne contient pas"
@ -334,6 +335,8 @@ fr_FR:
SELECT_TYPE_NOT_EQUAL_TO: "Différent de"
SELECT_TYPE_OVER: "Au-dessus de"
SELECT_TYPE_UNDER: "Au-dessous de"
SELECT_TYPE_TEXT: "Texte"
SELECT_TYPE_RAW: "Brut"
SELECT_MATCH_ANY: "Correspondant à l'une des règles suivantes"
SELECT_MATCH_ALL: "Correspondant à toutes les règles suivantes"
MARK_AS_READ_LABEL: "Marquer comme lu"

View file

@ -322,6 +322,7 @@ nl_NL:
SELECT_FIELD_RECIPIENTS: "Ontvanger(s) (Aan of CC)"
SELECT_FIELD_SUBJECT: "Onderwerp"
SELECT_FIELD_HEADER: "Berichtkop"
SELECT_FIELD_BODY: "Berichtinhoud"
SELECT_FIELD_SIZE: "Grootte"
SELECT_TYPE_CONTAINS: "Bevat"
SELECT_TYPE_NOT_CONTAINS: "Bevat niet"
@ -333,6 +334,8 @@ nl_NL:
SELECT_TYPE_NOT_EQUAL_TO: "Niet gelijk aan"
SELECT_TYPE_OVER: "Meer dan"
SELECT_TYPE_UNDER: "Minder dan"
SELECT_TYPE_TEXT: "Tekst"
SELECT_TYPE_RAW: "Raw"
SELECT_MATCH_ANY: "Komt overeen met een van de volgende voorwaarden"
SELECT_MATCH_ALL: "Komt overeen met alle voorwaarden"
MARK_AS_READ_LABEL: "Markeer als gelezen"

View file

@ -0,0 +1,12 @@
<div class="control-group" data-bind="css: {'error': valueError}" 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.typeOptionsBody, 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" style="margin-top: 5px;"
data-bind="click: function (oCondition) { $root.removeCondition(oCondition); }">
<i class="icon-trash"></i>
</span>
</div>