OSDN Git Service

FIX:アップグレードスクリプトがNucleus3.6上で動作するように修正
[nucleus-jp/nucleus-next.git] / nucleus / upgrades / upgrade4.0.php
index 76d2649..07a122b 100644 (file)
@@ -12,7 +12,7 @@
 /**
  * @license http://nucleuscms.org/license.txt GNU General Public License
  * @copyright Copyright (C) 2002-2012 The Nucleus Group
- * @version $Id: upgrade2.0.php 1388 2009-07-18 06:31:28Z shizuki $
+ * @version $Id$
  */
 
 function upgrade_do400()
@@ -32,15 +32,19 @@ function upgrade_do400()
        /* change Language setting to Locale */
        if ( upgrade_checkIfCVExists('Language') )
        {
-               $language = DB::getValue("SELECT value FROM " . sql_table('config') . " WHERE name='Language'");
-               $locale = i18n::convert_old_language_file_name_to_locale($language);
-               if ( $locale )
+               $res = sql_query("SELECT value FROM " . sql_table('config') . " WHERE name='Language'");
+               if ( $res !== FALSE )
                {
-                       $query = 'INSERT INTO ' . sql_table('config') . " VALUES ('Locale','{$locale}')";
-                       upgrade_query('Creating Locale config value', $query);
-                       
-                       $query = 'DELETE FROM ' . sql_table('config') . " WHERE name='Language'";
-                       upgrade_query("Removing Language config value", $query);
+                       $row = sql_fetch_assoc($res);
+                       $locale = i18n_upg::convert_old_language_file_name_to_locale($row['value']);
+                       if ( $locale )
+                       {
+                               $query = 'INSERT INTO ' . sql_table('config') . " VALUES ('Locale','{$locale}')";
+                               upgrade_query('Creating Locale config value', $query);
+                               
+                               $query = 'DELETE FROM ' . sql_table('config') . " WHERE name='Language'";
+                               upgrade_query("Removing Language config value", $query);
+                       }
                }
        }
        
@@ -89,14 +93,14 @@ function upgrade_do400()
        }
        
        // all member default value set
-       $res = DB::getResult("SELECT * FROM " . sql_table('member'));
-       foreach ( $res as $row )
+       $result = sql_query("SELECT * FROM " . sql_table('member'));
+       while ( $row = mysql_fetch_assoc($result) )
        {
-               $locale = i18n::convert_old_language_file_name_to_locale($row['mlocale']);
+               $locale = i18n_upg::convert_old_language_file_name_to_locale($row['mlocale']);
                if ( $locale )
                {
                        $query = 'UPDATE $s SET mlocale=$s WHERE mnumber=$d';
-                       $query = sprintf($query, sql_table('member'), DB::quoteValue($locale), $row['mnumber']);
+                       $query = sprintf($query, sql_table('member'), addslashes($locale), $row['mnumber']);
                        upgrade_query('Changing mlocale value', $query);
                }
        }
@@ -107,3 +111,71 @@ function upgrade_do400()
        
 }
 
+class i18n_upg
+{
+       /**
+       * i18n::convert_old_language_file_name_to_locale()
+       * NOTE: this should be obsoleted near future.
+       *
+       * @static
+       * @param        string  $target_language        old translation file name
+       * @return       string  locale name as language_script_region
+       */
+       static public function convert_old_language_file_name_to_locale($target_language)
+       {
+               $target_locale = '';
+               foreach ( self::$lang_refs as $language => $locale )
+               {
+                       if ( $target_language == $language )
+                       {
+                               if ( preg_match('#^(.+)\.(.+)$#', $locale, $match) )
+                               {
+                                       $target_locale = $match[1];
+                               }
+                               else
+                               {
+                                       $target_locale = $locale;
+                               }
+                               break;
+                       }
+               }
+               return $target_locale;
+       }
+       
+       /**
+        * i18n::$lang_refs
+        * reference table to convert old and new way to name translation files.
+        * NOTE: this should be obsoleted as soon as possible.
+        *
+        * @static
+        */
+       static private $lang_refs = array(
+                       "english"               => "en_Latn_US",
+                       "english-utf8"  => "en_Latn_US.UTF-8",
+                       "bulgarian"     => "bg_Cyrl_BG",
+                       "finnish"               => "fi_Latn_FI",
+                       "catalan"               => "ca_Latn_ES",
+                       "french"                => "fr_Latn_FR",
+                       "russian"               => "ru_Cyrl_RU",
+                       "chinese"               => "zh_Hans_CN",
+                       "simchinese"    => "zh_Hans_CN",
+                       "chineseb5"     => "zh_Hant_TW",
+                       "traditional_chinese"   =>      "zh_Hant_TW",
+                       "galego"                => "gl_Latn_ES",
+                       "german"                => "de_Latn_DE",
+                       "korean-utf"    => "ko_Kore_KR.UTF-8",
+                       "korean-euc-kr" => "ko_Kore_KR.EUC-KR",
+                       "slovak"                => "sk_Latn_SK",
+                       "czech"         => "cs_Latn_CZ",
+                       "hungarian"     => "hu_Latn_HU",
+                       "latvian"               => "lv_Latn_LV",
+                       "nederlands"    => "nl_Latn_NL",
+                       "italiano"              => "it_Latn_IT",
+                       "persian"               => "fa_Arab_IR",
+                       "spanish"               => "es_Latn_ES",
+                       "spanish-utf8"  => "es_Latn_ES.UTF-8",
+                       "japanese-euc"  => "ja_Jpan_JP.EUC-JP",
+                       "japanese-utf8" => "ja_Jpan_JP.UTF-8",
+                       "portuguese_brazil"     => "pt_Latn_BR"
+                       );
+}