/**
  * @param string $sFileString
  *
  * @return array
  */
 private function fileStringToCollection($sFileString)
 {
     $aResult = array();
     if (!empty($sFileString) && false !== \strpos($sFileString, 'RAINLOOP:SIEVE')) {
         $aMatch = array();
         if (\preg_match_all('/BEGIN:FILTER(.+?)BEGIN:HEADER(.+?)END:HEADER/s', $sFileString, $aMatch) && isset($aMatch[2]) && \is_array($aMatch[2])) {
             foreach ($aMatch[2] as $sEncodedLine) {
                 if (!empty($sEncodedLine)) {
                     $sDecodedLine = \base64_decode(\preg_replace('/[\\s]+/', '', $sEncodedLine));
                     if (!empty($sDecodedLine)) {
                         $oItem = new \RainLoop\Providers\Filters\Classes\Filter();
                         if ($oItem && $oItem->unserializeFromJson($sDecodedLine)) {
                             $aResult[] = $oItem;
                         }
                     }
                 }
             }
         }
     }
     return $aResult;
 }
 /**
  * @return array
  *
  * @throws \MailSo\Base\Exceptions\Exception
  */
 public function DoFiltersSave()
 {
     $oAccount = $this->getAccountFromToken();
     if (!$this->GetCapa(false, \RainLoop\Enumerations\Capa::FILTERS, $oAccount)) {
         return $this->FalseResponse(__FUNCTION__);
     }
     $aIncFilters = $this->GetActionParam('Filters', array());
     $sRaw = $this->GetActionParam('Raw', '');
     $bRawIsActive = '1' === (string) $this->GetActionParam('RawIsActive', '0');
     $aFilters = array();
     foreach ($aIncFilters as $aFilter) {
         if ($aFilter) {
             $oFilter = new \RainLoop\Providers\Filters\Classes\Filter();
             if ($oFilter->FromJSON($aFilter)) {
                 $aFilters[] = $oFilter;
             }
         }
     }
     $this->Plugins()->RunHook('filter.filters-save', array($oAccount, &$aFilters, &$sRaw, &$bRawIsActive));
     return $this->DefaultResponse(__FUNCTION__, $this->FiltersProvider()->Save($oAccount, $aFilters, $sRaw, $bRawIsActive));
 }