| +-----------------------------------------------------------------------+ */ class rcmail_action_utils_spell extends rcmail_action { // only process ajax requests protected static $mode = self::MODE_AJAX; /** * Request handler. * * @param array $args Arguments from the previous step(s) */ #[Override] public function run($args = []) { // read input $lang = rcube_utils::get_input_string('lang', rcube_utils::INPUT_GET); $data = file_get_contents('php://input'); $learn_word = strpos($data, ''); // Get data string $left = strpos($data, ''); $right = strrpos($data, ''); $data = substr($data, $left + 6, $right - ($left + 6)); $data = html_entity_decode($data, \ENT_QUOTES, RCUBE_CHARSET); $spellchecker = new rcube_spellchecker($lang); if ($learn_word) { $spellchecker->add_word($data); $result = ''; } elseif (empty($data)) { $result = ''; } else { $spellchecker->check($data); $result = $spellchecker->get_xml(); } if ($error = $spellchecker->error()) { rcube::raise_error('Spellcheck error: ' . $error, true); http_response_code(500); exit; } // set response length header('Content-Length: ' . strlen($result)); // Don't use server's default Content-Type charset (#1486406) header('Content-Type: text/xml; charset=' . RCUBE_CHARSET); echo $result; exit; } }