diff --git a/cleantalk/antispam/acp/main_module.php b/cleantalk/antispam/acp/main_module.php index d0d4aa9..e7fbf09 100644 --- a/cleantalk/antispam/acp/main_module.php +++ b/cleantalk/antispam/acp/main_module.php @@ -12,6 +12,7 @@ use Cleantalk\Common\Api\Api; use Cleantalk\Custom\Errors; +use cleantalk\antispam\model\SuperGlobals; class main_module { @@ -421,6 +422,8 @@ function sfw_update($access_key = null) require_once($autoload_path); } + $super_globals_were_disabled = SuperGlobals::areDisabled($request); + try { $api_key = $access_key ?: $config['cleantalk_antispam_apikey']; @@ -434,7 +437,7 @@ function sfw_update($access_key = null) $result = $firewall->getUpdater()->update(); - $request->disable_super_globals(); + SuperGlobals::restore($request, $super_globals_were_disabled); if (empty($result['error'])) { $config->set('cleantalk_antispam_sfw_update_last_gc', time()); @@ -442,7 +445,7 @@ function sfw_update($access_key = null) return $result; } catch (\Exception $e) { - $request->disable_super_globals(); + SuperGlobals::restore($request, $super_globals_were_disabled); error_log('CleanTalk SFW update error: ' . $e->getMessage()); return array('error' => $e->getMessage()); } @@ -457,6 +460,8 @@ function sfw_send_logs($access_key) require_once($autoload_path); } + $super_globals_were_disabled = SuperGlobals::areDisabled($request); + try { $request->enable_super_globals(); @@ -467,7 +472,7 @@ function sfw_send_logs($access_key) $result = $firewall->sendLogs(); - $request->disable_super_globals(); + SuperGlobals::restore($request, $super_globals_were_disabled); if (!isset($result['error'])) { $config->set('cleantalk_antispam_sfw_logs_send_last_gc', time()); @@ -475,7 +480,7 @@ function sfw_send_logs($access_key) return $result; } catch (\Exception $e) { - $request->disable_super_globals(); + SuperGlobals::restore($request, $super_globals_were_disabled); error_log('CleanTalk SFW send logs error: ' . $e->getMessage()); return array('error' => $e->getMessage()); } diff --git a/cleantalk/antispam/event/main_listener.php b/cleantalk/antispam/event/main_listener.php index 88f6f28..63cd633 100644 --- a/cleantalk/antispam/event/main_listener.php +++ b/cleantalk/antispam/event/main_listener.php @@ -18,6 +18,7 @@ use phpbb\user; use phpbb\db\driver\driver_interface; use cleantalk\antispam\model\main_model; +use cleantalk\antispam\model\SuperGlobals; use phpbb\symfony_request; /** @@ -132,6 +133,8 @@ public function sfw_check($event) return; } + $super_globals_were_disabled = SuperGlobals::areDisabled($this->request); + try { $api_key = $this->config['cleantalk_antispam_apikey']; @@ -155,12 +158,13 @@ public function sfw_check($event) $firewall->run(); - $this->request->disable_super_globals(); + SuperGlobals::restore($this->request, $super_globals_were_disabled); } catch (\Exception $e) { - $this->request->disable_super_globals(); + SuperGlobals::restore($this->request, $super_globals_were_disabled); error_log('CleanTalk SFW error: ' . $e->getMessage()); } } + /** * Fills tamplate variable by generated JS-code with unique hash * @@ -372,6 +376,8 @@ public function ccf_check($event) // Remote calls via Common library $api_key = $this->config['cleantalk_antispam_apikey']; if ($api_key) { + $super_globals_were_disabled = SuperGlobals::areDisabled($this->request); + try { // Enable superglobals BEFORE RC check — RemoteCalls::check() reads $_GET/$_REQUEST $this->request->enable_super_globals(); @@ -384,17 +390,17 @@ public function ccf_check($event) $remote_calls = new $rc_class($api_key, new $storage_handler_class()); try { $rc_result = $remote_calls->process(); - $this->request->disable_super_globals(); + SuperGlobals::restore($this->request, $super_globals_were_disabled); die($rc_result); } catch (\Cleantalk\Common\RemoteCalls\Exceptions\RemoteCallsException $exception) { - $this->request->disable_super_globals(); + SuperGlobals::restore($this->request, $super_globals_were_disabled); error_log('CleanTalk RC error: ' . $exception->getMessage()); die('FAIL ' . json_encode(array('error' => $exception->getMessage()))); } } - $this->request->disable_super_globals(); + SuperGlobals::restore($this->request, $super_globals_were_disabled); } catch (\Exception $e) { - $this->request->disable_super_globals(); + SuperGlobals::restore($this->request, $super_globals_were_disabled); error_log('CleanTalk RC init error: ' . $e->getMessage()); } } diff --git a/cleantalk/antispam/model/SuperGlobals.php b/cleantalk/antispam/model/SuperGlobals.php new file mode 100644 index 0000000..0170b0b --- /dev/null +++ b/cleantalk/antispam/model/SuperGlobals.php @@ -0,0 +1,46 @@ +super_globals_disabled(); + } + + /** + * Restores the superglobals state captured before CleanTalk processing + * + * @param \phpbb\request\request $request + * @param bool $were_disabled + */ + static public function restore($request, $were_disabled) + { + if ($were_disabled && is_object($request) && method_exists($request, 'disable_super_globals')) + { + $request->disable_super_globals(); + } + } +}