config->get('urls_results_batch', []); $testId = Security::getVar('int', 'test_id', 0); $result = Security::getVar('string', 'result', ''); if (empty($result) || empty($testId)) { DebugService::logMessage('callback_controller.log', 'Params test_id or result is empty'); exit; } if (!empty($configUrls)) { $configUrls = json_decode($configUrls, true); if (!empty($configUrls[$testId])) unset($configUrls[$testId]); $this->config->save(['urls_results_batch' => json_encode($configUrls)]); } $result = json_decode($result, true); if (empty($result['results'])) { DebugService::logMessage('callback_controller.log', 'The results from the API are empty'); exit; } $results = $result['results']; // Prepare the query to insert the test $insertQuery = 'INSERT INTO #__acyc_test (`email`, `raw_result`, `final_status`, `disposable`, `free`, `accept_all`, `role_email`, `status`, `block_reason`) VALUES '; $allTests = []; foreach ($results as $oneResult) { $allTests[$oneResult['email']] = [ 'email' => Database::escapeDB($oneResult['email']), //email 'raw_result' => Database::escapeDB(json_encode($oneResult)), //raw_result 'final_status' => Database::escapeDB($oneResult['email_exists']), //final_status 'disposable' => $oneResult['disposable'] ? 1 : 0, //disposable 'free' => $oneResult['free_mailbox'] ? 1 : 0, //free 'accept_all' => $oneResult['accept_all'] ? 1 : 0, //accept_all 'role_email' => $oneResult['role_based_address'] ? 1 : 0, //role_email 'status' => 1, //status 'block_reason' => 'NULL', //block_reason ]; } // We get the selected table to check $tablesSelected = $this->config->get('tables_selected', []); if (empty($tablesSelected)) { DebugService::logMessage('callback_controller.log', 'No table selected in the configuration'); exit; } $tablesSelected = explode(',', $tablesSelected); if (in_array('acymailing', $tablesSelected)) { $acymailingUserClass = new AcymailingUserClass(); $acymailingUserClass->handleBatchCallback($results, $allTests); } if (in_array('cms', $tablesSelected)) { $cmsUserClass = new CmsUserClass(); $cmsUserClass->handleBatchCallback($results, $allTests); } foreach ($allTests as $email => $databaseValues) { $allTests[$email] = implode(',', array_values($databaseValues)); } $insertQuery .= '('.implode('),(', array_values($allTests)).')'; $insertQuery .= 'ON DUPLICATE KEY UPDATE email=values(email), raw_result=values(raw_result), final_status=values(final_status), disposable=values(disposable), free=values(free), accept_all=values(accept_all), role_email=values(role_email), status=values(status), block_reason=values(block_reason)'; try { // We execute the query to store the email tested Database::query($insertQuery); } catch (\Exception $exception) { DebugService::logMessage('callback_controller.log', 'Error on updating the table test - '.$exception->getMessage()); } exit; } }