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', Recipient: 'Recipient',
Subject: 'Subject', Subject: 'Subject',
Header: 'Header', Header: 'Header',
Body: 'Body',
Size: 'Size' Size: 'Size'
}; };
@ -275,7 +276,9 @@ export const FilterConditionType = {
NotEqualTo: 'NotEqualTo', NotEqualTo: 'NotEqualTo',
Regex: 'Regex', Regex: 'Regex',
Over: 'Over', Over: 'Over',
Under: 'Under' Under: 'Under',
Text: 'Text',
Raw: 'Raw'
}; };
/** /**

View file

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

View file

@ -38,6 +38,7 @@ class FilterPopupView extends AbstractViewNext {
this.fieldOptions = ko.observableArray([]); this.fieldOptions = ko.observableArray([]);
this.typeOptions = ko.observableArray([]); this.typeOptions = ko.observableArray([]);
this.typeOptionsSize = ko.observableArray([]); this.typeOptionsSize = ko.observableArray([]);
this.typeOptionsBody = ko.observableArray([]);
initOnStartOrLangChange(this.populateOptions.bind(this)); 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.Recipient, 'name': i18n('POPUPS_FILTER/SELECT_FIELD_RECIPIENTS') },
{ 'id': FilterConditionField.Subject, 'name': i18n('POPUPS_FILTER/SELECT_FIELD_SUBJECT') }, { 'id': FilterConditionField.Subject, 'name': i18n('POPUPS_FILTER/SELECT_FIELD_SUBJECT') },
{ 'id': FilterConditionField.Size, 'name': i18n('POPUPS_FILTER/SELECT_FIELD_SIZE') }, { '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([ this.typeOptions([
@ -126,6 +128,11 @@ class FilterPopupView extends AbstractViewNext {
{ 'id': FilterConditionType.Over, 'name': i18n('POPUPS_FILTER/SELECT_TYPE_OVER') }, { 'id': FilterConditionType.Over, 'name': i18n('POPUPS_FILTER/SELECT_TYPE_OVER') },
{ 'id': FilterConditionType.Under, 'name': i18n('POPUPS_FILTER/SELECT_TYPE_UNDER') } { '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) { removeCondition(oConditionToDelete) {

View file

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

View file

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

View file

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

View file

@ -323,6 +323,7 @@ en:
SELECT_FIELD_RECIPIENTS: "Recipients (To or CC)" SELECT_FIELD_RECIPIENTS: "Recipients (To or CC)"
SELECT_FIELD_SUBJECT: "Subject" SELECT_FIELD_SUBJECT: "Subject"
SELECT_FIELD_HEADER: "Header" SELECT_FIELD_HEADER: "Header"
SELECT_FIELD_BODY: "Body"
SELECT_FIELD_SIZE: "Size" SELECT_FIELD_SIZE: "Size"
SELECT_TYPE_CONTAINS: "Contains" SELECT_TYPE_CONTAINS: "Contains"
SELECT_TYPE_NOT_CONTAINS: "Not Contains" SELECT_TYPE_NOT_CONTAINS: "Not Contains"
@ -334,6 +335,8 @@ en:
SELECT_TYPE_NOT_EQUAL_TO: "Not Equal To" SELECT_TYPE_NOT_EQUAL_TO: "Not Equal To"
SELECT_TYPE_OVER: "Over" SELECT_TYPE_OVER: "Over"
SELECT_TYPE_UNDER: "Under" SELECT_TYPE_UNDER: "Under"
SELECT_TYPE_TEXT: "Text"
SELECT_TYPE_RAW: "Raw"
SELECT_MATCH_ANY: "Matching ANY of the following rules" SELECT_MATCH_ANY: "Matching ANY of the following rules"
SELECT_MATCH_ALL: "Matching ALL of the following rules" SELECT_MATCH_ALL: "Matching ALL of the following rules"
MARK_AS_READ_LABEL: "Mark as read" 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_RECIPIENTS: "Empfänger (An oder CC)"
SELECT_FIELD_SUBJECT: "Betreff" SELECT_FIELD_SUBJECT: "Betreff"
SELECT_FIELD_HEADER: "Nachrichtenkopf" SELECT_FIELD_HEADER: "Nachrichtenkopf"
SELECT_FIELD_BODY: "Nachrichteninhalt"
SELECT_FIELD_SIZE: "Größe" SELECT_FIELD_SIZE: "Größe"
SELECT_TYPE_CONTAINS: "Enthält" SELECT_TYPE_CONTAINS: "Enthält"
SELECT_TYPE_NOT_CONTAINS: "Enthält nicht" SELECT_TYPE_NOT_CONTAINS: "Enthält nicht"
@ -333,6 +334,8 @@ de_DE:
SELECT_TYPE_NOT_EQUAL_TO: "Ungleich" SELECT_TYPE_NOT_EQUAL_TO: "Ungleich"
SELECT_TYPE_OVER: "Über" SELECT_TYPE_OVER: "Über"
SELECT_TYPE_UNDER: "Unter" SELECT_TYPE_UNDER: "Unter"
SELECT_TYPE_TEXT: "Text"
SELECT_TYPE_RAW: "Roh"
SELECT_MATCH_ANY: "Eine der folgenden Regeln trifft zu" SELECT_MATCH_ANY: "Eine der folgenden Regeln trifft zu"
SELECT_MATCH_ALL: "Alle folgenden Regeln treffen zu" SELECT_MATCH_ALL: "Alle folgenden Regeln treffen zu"
MARK_AS_READ_LABEL: "Als Gelesen markieren" MARK_AS_READ_LABEL: "Als Gelesen markieren"

View file

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

View file

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

View file

@ -322,6 +322,7 @@ es_ES:
SELECT_FIELD_RECIPIENTS: "Destinatarios (A o CC)" SELECT_FIELD_RECIPIENTS: "Destinatarios (A o CC)"
SELECT_FIELD_SUBJECT: "Asunto" SELECT_FIELD_SUBJECT: "Asunto"
SELECT_FIELD_HEADER: "Encabezado" SELECT_FIELD_HEADER: "Encabezado"
SELECT_FIELD_BODY: "Body"
SELECT_FIELD_SIZE: "Tamaño" SELECT_FIELD_SIZE: "Tamaño"
SELECT_TYPE_CONTAINS: "Contiene" SELECT_TYPE_CONTAINS: "Contiene"
SELECT_TYPE_NOT_CONTAINS: "No Contiene" SELECT_TYPE_NOT_CONTAINS: "No Contiene"
@ -333,6 +334,8 @@ es_ES:
SELECT_TYPE_NOT_EQUAL_TO: "Distinto De" SELECT_TYPE_NOT_EQUAL_TO: "Distinto De"
SELECT_TYPE_OVER: "Por Encima" SELECT_TYPE_OVER: "Por Encima"
SELECT_TYPE_UNDER: "Por Debajo" SELECT_TYPE_UNDER: "Por Debajo"
SELECT_TYPE_TEXT: "Texto"
SELECT_TYPE_RAW: "Crudo"
SELECT_MATCH_ANY: "Si coincide alguna de estas reglas" SELECT_MATCH_ANY: "Si coincide alguna de estas reglas"
SELECT_MATCH_ALL: "Si coinciden todas las reglas" SELECT_MATCH_ALL: "Si coinciden todas las reglas"
MARK_AS_READ_LABEL: "Marcar como leído" 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_RECIPIENTS: "Destinataires (A ou CC)"
SELECT_FIELD_SUBJECT: "Sujet" SELECT_FIELD_SUBJECT: "Sujet"
SELECT_FIELD_HEADER: "En-tête" SELECT_FIELD_HEADER: "En-tête"
SELECT_FIELD_BODY: "Contenu"
SELECT_FIELD_SIZE: "Taille" SELECT_FIELD_SIZE: "Taille"
SELECT_TYPE_CONTAINS: "Contient" SELECT_TYPE_CONTAINS: "Contient"
SELECT_TYPE_NOT_CONTAINS: "Ne contient pas" SELECT_TYPE_NOT_CONTAINS: "Ne contient pas"
@ -334,6 +335,8 @@ fr_FR:
SELECT_TYPE_NOT_EQUAL_TO: "Différent de" SELECT_TYPE_NOT_EQUAL_TO: "Différent de"
SELECT_TYPE_OVER: "Au-dessus de" SELECT_TYPE_OVER: "Au-dessus de"
SELECT_TYPE_UNDER: "Au-dessous 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_ANY: "Correspondant à l'une des règles suivantes"
SELECT_MATCH_ALL: "Correspondant à toutes les règles suivantes" SELECT_MATCH_ALL: "Correspondant à toutes les règles suivantes"
MARK_AS_READ_LABEL: "Marquer comme lu" 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_RECIPIENTS: "Ontvanger(s) (Aan of CC)"
SELECT_FIELD_SUBJECT: "Onderwerp" SELECT_FIELD_SUBJECT: "Onderwerp"
SELECT_FIELD_HEADER: "Berichtkop" SELECT_FIELD_HEADER: "Berichtkop"
SELECT_FIELD_BODY: "Berichtinhoud"
SELECT_FIELD_SIZE: "Grootte" SELECT_FIELD_SIZE: "Grootte"
SELECT_TYPE_CONTAINS: "Bevat" SELECT_TYPE_CONTAINS: "Bevat"
SELECT_TYPE_NOT_CONTAINS: "Bevat niet" SELECT_TYPE_NOT_CONTAINS: "Bevat niet"
@ -333,6 +334,8 @@ nl_NL:
SELECT_TYPE_NOT_EQUAL_TO: "Niet gelijk aan" SELECT_TYPE_NOT_EQUAL_TO: "Niet gelijk aan"
SELECT_TYPE_OVER: "Meer dan" SELECT_TYPE_OVER: "Meer dan"
SELECT_TYPE_UNDER: "Minder 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_ANY: "Komt overeen met een van de volgende voorwaarden"
SELECT_MATCH_ALL: "Komt overeen met alle voorwaarden" SELECT_MATCH_ALL: "Komt overeen met alle voorwaarden"
MARK_AS_READ_LABEL: "Markeer als gelezen" 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>