Example #1
0
 /**
  * @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;
 }
Example #2
0
 /**
  * @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;
 }
Example #3
0
 /**
  * @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;
 }