/** * @param array $aFilter * * @return array */ public function FromJSON($aFilter) { if (\is_array($aFilter)) { $this->sID = isset($aFilter['ID']) ? $aFilter['ID'] : ''; $this->sName = isset($aFilter['Name']) ? $aFilter['Name'] : ''; $this->bEnabled = isset($aFilter['Enabled']) ? '1' === (string) $aFilter['Enabled'] : true; $this->sConditionsType = isset($aFilter['ConditionsType']) ? $aFilter['ConditionsType'] : \RainLoop\Providers\Filters\Enumerations\ConditionsType::ANY; $this->sActionType = isset($aFilter['ActionType']) ? $aFilter['ActionType'] : \RainLoop\Providers\Filters\Enumerations\ActionType::MOVE_TO; $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; $this->bMarkAsRead = isset($aFilter['MarkAsRead']) ? '1' === (string) $aFilter['MarkAsRead'] : false; $this->aConditions = \RainLoop\Providers\Filters\Classes\FilterCondition::CollectionFromJSON(isset($aFilter['Conditions']) ? $aFilter['Conditions'] : array()); return true; } return false; }
/** * @param \RainLoop\Providers\Filters\Classes\FilterCondition $oCondition * * @return string */ private function conditionToSieveScript($oCondition) { $sResult = ''; $sTypeWord = ''; $bTrue = true; $sValue = \trim($oCondition->Value()); $sValueSecond = \trim($oCondition->ValueSecond()); if (0 < \strlen($sValue) || 0 < \strlen($sValue) && 0 < \strlen($sValueSecond) && \RainLoop\Providers\Filters\Enumerations\ConditionField::HEADER === $oCondition->Field()) { switch ($oCondition->Type()) { case \RainLoop\Providers\Filters\Enumerations\ConditionType::OVER: $sTypeWord = ':over'; break; case \RainLoop\Providers\Filters\Enumerations\ConditionType::UNDER: $sTypeWord = ':under'; break; case \RainLoop\Providers\Filters\Enumerations\ConditionType::NOT_EQUAL_TO: $sResult .= 'not '; case \RainLoop\Providers\Filters\Enumerations\ConditionType::EQUAL_TO: $sTypeWord = ':is'; break; case \RainLoop\Providers\Filters\Enumerations\ConditionType::NOT_CONTAINS: $sResult .= 'not '; case \RainLoop\Providers\Filters\Enumerations\ConditionType::CONTAINS: $sTypeWord = ':contains'; break; default: $bTrue = false; $sResult = '/* @Error: unknown type value */ false'; break; } switch ($oCondition->Field()) { case \RainLoop\Providers\Filters\Enumerations\ConditionField::FROM: $sResult .= 'header ' . $sTypeWord . ' ["From"]'; break; case \RainLoop\Providers\Filters\Enumerations\ConditionField::RECIPIENT: $sResult .= 'header ' . $sTypeWord . ' ["To", "CC"]'; break; case \RainLoop\Providers\Filters\Enumerations\ConditionField::SUBJECT: $sResult .= 'header ' . $sTypeWord . ' ["Subject"]'; break; case \RainLoop\Providers\Filters\Enumerations\ConditionField::HEADER: $sResult .= 'header ' . $sTypeWord . ' ["' . $this->quote($sValueSecond) . '"]'; break; case \RainLoop\Providers\Filters\Enumerations\ConditionField::SIZE: $sResult .= 'size ' . $sTypeWord; break; default: $bTrue = false; $sResult = '/* @Error: unknown field value */ false'; break; } if ($bTrue) { if (\in_array($oCondition->Field(), array(\RainLoop\Providers\Filters\Enumerations\ConditionField::FROM, \RainLoop\Providers\Filters\Enumerations\ConditionField::RECIPIENT)) && false !== \strpos($sValue, ',')) { $self = $this; $aValue = \array_map(function ($sValue) use($self) { return '"' . $self->quote(\trim($sValue)) . '"'; }, \explode(',', $sValue)); $sResult .= ' [' . \trim(\implode(', ', $aValue)) . ']'; } else { if (\RainLoop\Providers\Filters\Enumerations\ConditionField::SIZE === $oCondition->Field()) { $sResult .= ' ' . $this->quote($sValue); } else { $sResult .= ' "' . $this->quote($sValue) . '"'; } } $sResult = \MailSo\Base\Utils::StripSpaces($sResult); } } else { $sResult = '/* @Error: empty condition value */ false'; } return $sResult; }
/** * @param \RainLoop\Providers\Filters\Classes\FilterCondition $oCondition * * @return string */ private function conditionToSieveScript($oCondition) { $sResult = ''; $sTypeWord = ''; $sValue = \trim($oCondition->Value()); if (0 < strlen($sValue)) { switch ($oCondition->Type()) { case \RainLoop\Providers\Filters\Enumerations\ConditionType::NOT_EQUAL_TO: $sResult .= 'not '; case \RainLoop\Providers\Filters\Enumerations\ConditionType::EQUAL_TO: $sTypeWord = ':is'; break; case \RainLoop\Providers\Filters\Enumerations\ConditionType::NOT_CONTAINS: $sResult .= 'not '; case \RainLoop\Providers\Filters\Enumerations\ConditionType::CONTAINS: $sTypeWord = ':contains'; break; } switch ($oCondition->Field()) { case \RainLoop\Providers\Filters\Enumerations\ConditionField::FROM: $sResult .= 'header ' . $sTypeWord . ' ["From"]'; break; case \RainLoop\Providers\Filters\Enumerations\ConditionField::RECIPIENT: $sResult .= 'header ' . $sTypeWord . ' ["To", "CC"]'; break; case \RainLoop\Providers\Filters\Enumerations\ConditionField::SUBJECT: $sResult .= 'header ' . $sTypeWord . ' ["Subject"]'; break; } if (\in_array($oCondition->Field(), array(\RainLoop\Providers\Filters\Enumerations\ConditionField::FROM, \RainLoop\Providers\Filters\Enumerations\ConditionField::RECIPIENT)) && false !== \strpos($sValue, ',')) { $self = $this; $aValue = \array_map(function ($sValue) use($self) { return '"' . $self->quote(\trim($sValue)) . '"'; }, \explode(',', $sValue)); $sResult .= ' [' . \trim(\implode(', ', $aValue)) . ']'; } else { $sResult .= ' "' . $this->quote($sValue) . '"'; } $sResult = \preg_replace('/[\\s]+/u', ' ', $sResult); } else { $sResult = '/* @Error: empty condition value */ false'; } return $sResult; }