/** * @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)); }