From c344b64f13e7aa3c87c423cc14e57536d28c40b6 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Fri, 18 Oct 2013 06:50:25 -0400
Subject: [PATCH] Get supported spell-check languages from the configured backend; replace suspended google spell service with our new service at spell.roundcube.net

---
 program/lib/Roundcube/rcube_spellchecker.php |   47 +++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/program/lib/Roundcube/rcube_spellchecker.php b/program/lib/Roundcube/rcube_spellchecker.php
index 31835db..d087d25 100644
--- a/program/lib/Roundcube/rcube_spellchecker.php
+++ b/program/lib/Roundcube/rcube_spellchecker.php
@@ -65,6 +65,49 @@
         }
     }
 
+    /**
+     * Return a list of supported languages
+     */
+    function languages()
+    {
+        // trust configuration
+        $configured = $this->rc->config->get('spellcheck_languages');
+        if (!empty($configured) && is_array($configured) && !$configured[0]) {
+            return $configured;
+        }
+        else if (!empty($configured)) {
+            $langs = (array)$configured;
+        }
+        else if ($this->backend) {
+            $langs = $this->backend->languages();
+        }
+
+        // load index
+        @include(RCUBE_LOCALIZATION_DIR . 'index.inc');
+
+        // add correct labels
+        $languages = array();
+        foreach ($langs as $lang) {
+            $langc = strtolower(substr($lang, 0, 2));
+            $alias = $rcube_language_aliases[$langc];
+            if (!$alias) {
+                $alias = $langc.'_'.strtoupper($langc);
+            }
+            if ($rcube_languages[$lang]) {
+                $languages[$lang] = $rcube_languages[$lang];
+            }
+            else if ($rcube_languages[$alias]) {
+                $languages[$lang] = $rcube_languages[$alias];
+            }
+            else {
+                $languages[$lang] = ucfirst($lang);
+            }
+        }
+
+        asort($languages);
+
+        return $languages;
+    }
 
     /**
      * Set content and check spelling
@@ -152,7 +195,7 @@
         // send output
         $out = '<?xml version="1.0" encoding="'.RCUBE_CHARSET.'"?><spellresult charschecked="'.mb_strlen($this->content).'">';
 
-        foreach ($this->matches as $item) {
+        foreach ((array)$this->matches as $item) {
             $out .= '<c o="'.$item[1].'" l="'.$item[2].'">';
             $out .= is_array($item[4]) ? implode("\t", $item[4]) : $item[4];
             $out .= '</c>';
@@ -173,7 +216,7 @@
     {
         $result = array();
 
-        foreach ($this->matches as $item) {
+        foreach ((array)$this->matches as $item) {
             if ($this->engine == 'pspell') {
                 $word = $item[0];
             }

--
Gitblit v1.9.1