public function Save($xData, $sName, $aTags = array(), $nTimeLife = false) { $xValue = F::Serialize($xData); self::$aStore[$sName] = array('tags' => (array) $aTags, 'data' => $xValue, 'time' => $nTimeLife ? time() + intval($nTimeLife) : false); }
protected function _checkLimits() { $iLimitQueries = intval(C::Get('module.search.limit.queries')); $iLimitPeriod = F::ToSeconds(C::Get('module.search.limit.period')); $iLimitInterval = F::ToSeconds(C::Get('module.search.limit.interval')); if (!F::GetRequest('q') || !$iLimitQueries || !$iLimitPeriod) { return true; } $sLastSearchQueries = E::ModuleSession()->Get('last_search_queries'); if (empty($sLastSearchQueries)) { $aLastSearchQueries = array(); } else { $aLastSearchQueries = F::Unserialize($sLastSearchQueries); } $iCount = 0; if (!empty($aLastSearchQueries)) { $iTimeLimit = time() - $iLimitPeriod; //echo date('H:i:s', time()), '--', date('H:i:s', $iTimeLimit), '<br>'; foreach ($aLastSearchQueries as $iIndex => $aQuery) { //echo $iIndex, ' - ', date('H:i:s', $aQuery['time']); if ($aQuery['time'] >= $iTimeLimit) { $iCount += 1; //echo ' * '; } //echo '<br>'; } $aLastQuery = end($aLastSearchQueries); } else { $aLastQuery = null; } if (count($aLastSearchQueries) > $iLimitQueries) { $aLastSearchQueries = array_slice($aLastSearchQueries, -$iLimitQueries); } $aLastSearchQueries[] = array('time' => time(), 'query' => F::GetRequest('q')); E::ModuleSession()->Set('last_search_queries', F::Serialize($aLastSearchQueries)); //die('iCount:' . $iCount); if ($iCount > $iLimitQueries) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('search_err_frequency', array('num' => $iLimitQueries, 'sec' => $iLimitPeriod))); return false; } if (!empty($aLastQuery['time']) && $iLimitInterval && $aLastQuery['time'] > time() - $iLimitInterval) { E::ModuleMessage()->AddErrorSingle(E::ModuleLang()->Get('search_err_interval', array('sec' => $iLimitInterval))); return false; } return true; }
/** * Save cache and check-file of current asset pack */ protected function _saveAssets() { $sCheckFileName = $this->GetAssetsCheckName(); F::File_PutContents($sCheckFileName, time(), LOCK_EX, true); $sCacheFileName = $this->GetAssetsCacheName(); F::File_PutContents($sCacheFileName, F::Serialize($this->aAssets), LOCK_EX, true); F::File_Delete($sCacheFileName . '.tmp'); }
/** * Сохраняет в файловом кеше кастомную конфигурацию * * @param $aConfig * @param $bReset */ protected static function _putCustomCfg($aConfig, $bReset = false) { if (is_array($aConfig) && ($sFile = self::_checkCustomCfg())) { $aConfig['_timestamp_'] = time(); if (!$bReset) { // Объединяем текущую конфигурацию с сохраняемой $aOldConfig = self::_getCustomCfg(); if ($aOldConfig) { $aConfig = F::Array_Merge($aOldConfig, $aConfig); } } F::File_PutContents($sFile, F::Serialize($aConfig)); } }
/** * Save cache and check-file of current asset pack */ protected function _saveAssets() { F::File_PutContents($this->GetAssetsCheckName(), time()); $sFile = $this->GetAssetsCacheName(); F::File_PutContents($sFile, F::Serialize($this->aAssets)); F::File_Delete($sFile . '.tmp'); }
/** * Запускает весь процесс :) * */ public function Exec() { $this->ParseUrl(); $this->DefineActionClass(); // Для возможности ДО инициализации модулей определить какой action/event запрошен $this->oEngine = E::getInstance(); $this->oEngine->Init(); // Подгружаем предыдущий URL, если он был $sData = E::ModuleSession()->GetCookie(static::BACKWARD_COOKIE); if ($sData) { $aData = F::Unserialize($sData); if (is_array($aData)) { $this->aBackwardUrl = $aData; } } // И сохраняем текущий, если это не ajax-запрос if (!F::AjaxRequest()) { E::ModuleSession()->SetCookie(static::BACKWARD_COOKIE, F::Serialize($this->aCurrentUrl, true)); } $this->ExecAction(); $this->Shutdown(false); }
/** * @param array $aLastSearchQueries */ protected function _statSave($aLastSearchQueries) { $sData = F::Serialize($aLastSearchQueries, true); if (C::Get('module.search.limit.check_ip')) { if (E::ModuleCache()->CacheTypeAvailable('memory')) { $sCacheType = 'memory'; } else { $sCacheType = 'file'; } E::ModuleCache()->Set($sData, $this->_statKey(), array(), false, ',' . $sCacheType); } else { E::ModuleSession()->Set('last_search_queries', $sData); } }
/** * Сохраняет в файловом кеше кастомную конфигурацию * * @param array $aConfig * @param bool $bReset */ protected static function _putFileCfg($aConfig, $bReset = false) { if (is_array($aConfig) && ($sFile = self::_checkFileCfg())) { if (!$bReset) { // Объединяем текущую конфигурацию с сохраняемой $aOldConfig = self::_getFileCfg(); if ($aOldConfig) { $aData = new DataArray($aOldConfig); foreach ($aConfig as $sKey => $xVal) { $aData[$sKey] = $xVal; } $aConfig = $aData->getArrayCopy(); } } $aConfig['_timestamp_'] = time(); $aConfig['_alto_hash_'] = self::_getHash(); F::File_PutContents($sFile, F::Serialize($aConfig), LOCK_EX); } }