OSDN Git Service

Merge branch 'skinnable-master'
[nucleus-jp/nucleus-next.git] / nucleus / upgrades / upgrade4.0.php
index 8896fbf..ed756b5 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()
@@ -22,29 +22,167 @@ function upgrade_do400()
                return "already installed";
        }
        
-       /* config.Language to config.Locale  */
-       if ( !upgrade_checkIfColumnExists('config','Locale') )
+       // Give user warning if they are running old version of PHP
+       if ( phpversion() < '5' )
        {
+<<<<<<< HEAD
                $res = DB::getResult("SELECT * FROM " . sql_table('config') . " WHERE name='Language'");
                foreach ( $res as $row )
                {
                        $locale = $row['Language'];
+=======
+               echo 'WARNING: You are running NucleusCMS on a older version of PHP that is no longer supported by NucleusCMS. Please upgrade to PHP5!';
+       }
+       
+       /* config table */
+       /* change Language setting to Locale */
+       if ( upgrade_checkIfCVExists('Language') )
+       {
+               $res = sql_query("SELECT value FROM " . sql_table('config') . " WHERE name='Language'");
+               if ( $res !== FALSE )
+               {
+                       $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);
+                       }
+>>>>>>> skinnable-master
                }
-               $query = 'INSERT INTO ' . sql_table('config') . " (name, value) VALUE('Locale', '{$locale}');";
-               upgrade_query("Renaming Language for configs to Locale", $query);
        }
        
-       if ( !upgrade_checkIfColumnExists('config','Language') )
+       /* change AdminCSS setting */
+       if ( upgrade_checkIfCVExists('AdminCSS') )
+       {
+               $query = 'UPDATE ' . sql_table('config') . " SET value='original' WHERE name='AdminCSS'";
+               upgrade_query('Changing AdminCSS config value', $query);
+       }
+       
+       /* create AdminSkin setting */
+       if ( !upgrade_checkIfCVExists('AdminSkin') )
+       {
+               $query = 'INSERT INTO ' . sql_table('config') . " VALUES ('AdminSkin','0')";
+               upgrade_query('Creating AdminSkin config value', $query);
+       }
+       
+       /* create BookmarkletSkin setting */
+       if ( !upgrade_checkIfCVExists('BookmarkletSkin') )
        {
-               $query = "DELETE * FROM " . sql_table('config') . " WHERE name='Language'";
-               upgrade_query("Renaming Language for configs to Locale", $query);
+               $query = 'INSERT INTO ' . sql_table('config') . " VALUES ('BookmarkletSkin','0')";
+               upgrade_query('Creating BookmarkletSkin config value', $query);
        }
        
-       /* member.deflang to member.mlocale   */
+       
+       /* member table */
+       /* changing the member table to rename deflang to mlocale */
        if ( !upgrade_checkIfColumnExists('member','mlocale') )
        {
-               $query =  'ALTER TABLE '.sql_table('member') . " CHANGE deflang mlocale varchar(10) NOT NULL default ''";
+               $query =  'ALTER TABLE '.sql_table('member') . " CHANGE deflang mlocale varchar(20) NOT NULL default '' AFTER mcookiekey";
                upgrade_query("Renaming deflang column for members to mlocale", $query);
        }
+       
+       /* changing the member table to add madminskin column */
+       if ( !upgrade_checkIfColumnExists('member','madminskin') )
+       {
+               $query =  'ALTER TABLE '.sql_table('member') . " ADD madminskin tinyint(2) NOT NULL default '0'";
+               upgrade_query("Adding a new row for the adminskin member option", $query);
+       }
+       
+       /* changing the member table to add mbkmklt column */
+               if ( !upgrade_checkIfColumnExists('member','mbkmklt') )
+       {
+               $query =  'ALTER TABLE '.sql_table('member') . " ADD mbkmklt tinyint(2) NOT NULL default '0'";
+               upgrade_query("Adding a new row for the bkmklt member option", $query);
+       }
+       
+       // all member default value set
+       $result = sql_query("SELECT * FROM " . sql_table('member'));
+       while ( $row = mysql_fetch_assoc($result) )
+       {
+               $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'), addslashes($locale), $row['mnumber']);
+                       upgrade_query('Changing mlocale value', $query);
+               }
+       }
+       
+       // 3.6 -> 4.0
+       // update database version
+       update_version('400');
+       
 }
 
+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"
+                       );
+}