XOOPS Cube 2.2へのアップグレード方法


参考URL: http://sourceforge.net/apps/mediawiki/xoopscube/index.php?title=Upgrade22;ja

*注） XOOPS Cube LegacyをXCLと表記します。*

XCL2.2で動く x-update という至極便利なモジュールを使いたいので、XCL2.1で構成されたサイトをXCL2.2にアップグレードした。せっかくなのでその方法をシェアします。

#1. サイトのバックアップ！

まずは現状のサイトのバックアップをしよう！
私はいまのところ数サイトをアップグレードしてどれも成功しているけど、もし間違ってしまった場合は戻せなくなってあたふたするのは嫌だから、必ずバックアップを行なってからアップグレードを行うのがベターだ。

####1. サイトをいったん閉鎖する

*管理画面 >  互換モジュール > 全般設定 > サイトを閉鎖する > はい*

こうすることでサイトがメンテナンスモードになるので、ユーザによる投稿ができなくなり、データ更新が停止できる。
ただし、閲覧のみのサイトであればメンテナンスモードへ移行しなくても良い場合もある。

####2. ファイルのバックアップ

とにかくXCLが動いているディレクトリごとファイルをバックアップしておく。tar.gzやZIPに固めるでもいいし、ディレクトリまるごとコピーを取っておくのでも良し、サーバからPCに転送しておくでもOK。

バックアップするべきディレクトリは下記の2つ。

```
htdocs
 ├ html
 └ xoops_trust_path
```

※ 人によってはディレクトリ名がhtmlじゃなくてhtdocsだったりwwwだったりpublic_htmlだったりすると思うので、適宜読み替えてください。

#2. ファイルの準備

https://github.com/xoopsx/legacy から最新のコードをダウンロードし解凍する。
コマンドが使える場合は下記のコマンドでも良い。

```コマンド（githubのアカウントを持っている人向け）
git clone git@github.com:XoopsX/legacy.git
```
もしくは

```コマンド（githubのアカウントを持っていない人向け）
git clone https://github.com/XoopsX/legacy.git
```

ダウンロードが終わると、下記の構成になっていると思います。

```Directory
htdocs
 ├ html
 ├ xoops_trust_path
 └ legacy
    ├ html
    └ xoops_trust_path
```

ダウンロードしたファイルから以下のディレクトリとファイルを削除します。

```削除するファイル
rm -fr legacy/html/install
rm -f  legacy/html/mainfile.php
rm -fr legacy/html/favicon.ico
```

```1行で削除する場合
rm -fr legacy/html/install legacy/html/mainfile.php legacy/html/favicon.ico
```

※ ダウンロードした内容をそのままアップロードしないように！！
**ダウンロードしたファイル全部で上書きしてしまうと既存の設定が消えてサイトが機能しなくなってしまいますので、 html, xoops_trust_path は基本的にサーバにアップロードしますが、必ず上記のファイルを削除してから上書きしてください。**

```bash
cp -r legacy/html/* html/
cp -r legacy/xoops_trust_path/* xoops_trust_path/
```

###英語以外の言語（日本語とか）を使う場合

1. 英語以外の言語を使う場合は、`extras/extra_languages` から必要な言語ファイルを移動します。
+ 例えば、日本語UTF8 環境で XOOPS Cube Legacy をお使いの場合、`extras/extra_languages/ja_utf8/` 以下の `language`, `modules` ディレクトリを `XOOPS_ROOT_PATH` 以下に上書きでコピーしてください。
（もう一つ `install` ディレクトリもありますが、アップグレードでは使いません）。

```bash
cp -r legacy/extras/extra_languages/ja_utf8/language/* html/language/
cp -r legacy/extras/extra_languages/ja_utf8/modules/* html/modules/
```

+ 準備したファイルをすべてサーバにアップロードします。`xoops_trust_path` が無いXOOPSを使っている人については、次のステップ *XOOPS_TRUST_PATH* も参照してください。
+ `xoops_trust_path/cache` のパーミッションを '777' に変更します。

```bash
mkdir xoops_trust_path/cache
chmod 777 xoops_trust_path/cache
```

##2-1. Altsysの対応（ホダ塾ディストリビューションを使っている場合）
この1行を

```追加する行
$this->_loadLanguage('legacy', 'setting');
```

`html/preload/SetupAltsysLangMgr.class.php` の `function loadGlobalMessageCatalog()` に以下のように追加してください。

```html/preload/SetupAltsysLangMgr.class.php
function loadGlobalMessageCatalog()
{
     /* if (!$this->_loadFile(XOOPS_ROOT_PATH . "/modules/legacy/language/" . $this->mLanguageName . "/global.php")) {
     $this->_loadFile(XOOPS_ROOT_PATH . "/modules/legacy/language/english/global.php");
     } */
     $this->_loadLanguage( 'legacy' , 'global' ) ;
     $this->_loadLanguage( 'legacy' , 'setting' ) ; /*** <= ここに追加するんだ！***/

     //
     // Now, if XOOPS_USE_MULTIBYTES isn't defined, set zero to it.
     //
     if (!defined("XOOPS_USE_MULTIBYTES")) {
         define("XOOPS_USE_MULTIBYTES", 0);
     }
}
```

#3. XOOPS_TRUST_PATH の作成
ホダ塾ディストリビューションを利用している場合は既に XOOPS_TRUST_PATH に対応している のでこの作業は必要ありませんが、そうでない場合は XOOPS_TRUST_PATH を用意する必要があります。

1. XCL2.2より, `xoops_trust_path` が追加になります。 このディレクトリは、`html/` の外に設置してください。`html` 以下に配置すると、セキュリティに問題が発生します。
+ `html/settings/site_custom.ini.php` が存在する場合、`/xoops_trust_path/settings/site_custom.ini` に移動します。
+ `html/class/smarty/plugins` に追加されたプラグインを `xoops_trust_path/libs/smarty/plugins` にコピーします（上書きコピーにならない要注意）。
+ 定数 XOOPS_TRUST_PATH を `mainfile.php` に追加してください。

```mainfile.php
define('XOOPS_TRUST_PATH', 'YOUR_PATH/xoops_trust_path');
```

実際はこんな感じ

```mainfile.phpコード追加後
・・・
if ( !defined("XOOPS_MAINFILE_INCLUDED") ) {
    define("XOOPS_MAINFILE_INCLUDED",1);

    define('XOOPS_ROOT_PATH', 'YOUR_PATH/html');
	
    define('XOOPS_TRUST_PATH', 'YOUR_PATH/xoops_trust_path'); /*** <= ここに追加するんだ！***/

    define('XOOPS_URL', 'http://YOUR_DOMAIN/html');

・・・
```

#4.ディレクトリパーミッションの変更

```bash
chmod 777 xoops_trust_path/templates_c/
chmod 777 xoops_trust_path/uploads
```

#5. ブラウザからアップグレード処理

1. `upgrade22.class.php` を `extras/extra_preload` から `html/preload` にアップロードします。

```bash
cp legacy/extras/extra_preload/upgrade22.class.php html/preload/
```

+ あなたのサイトにアクセスします。`profile` モジュールのインストール画面が表示されますので、インストールして下さい。
+ `html/preload/upgrade22.class.php` を削除します。
+ 管理画面のモジュール管理で、すべてのモジュールをアップデートします。

#6. 不要になったディレクトリの削除
無事にサイトの動作が確認できたら、以下のディレクトリ/ファイルを削除します。
無事にサイトの動作が確認できたらというのは、トップページ及び他のページにいくつかクリックしてみて遷移してみる、管理画面に入って、いくつかクリックしてみて正常に動いているかを確認する、というくらいで良いでしょう。

```削除するディレクトリ／ファイル
rm -fr html/cache
rm -fr html/class/smarty/*.{lib,php,tpl} （index.htmlを除く）
rm -fr html/class/smarty/core
rm -fr html/class/smarty/plugins/*.php （index.htmlを除く）
rm -fr html/settings
rm -fr html/templates_c
```

#7. 管理画面からモジュールのアップデート

XOOPS Cube 2.2 のモジュールで上書きされているので、管理画面から必要なモジュールに対してモジュールアップデートを行う必要があります。

```
管理画面 »» 互換モジュール »» モジュールの管理
```

から行なって下さい。
アップデートが必要なモジュールには"NEW"アイコンが表示されています。

#8. サイトを再開する

管理画面 > レガシーシステム > 全般設定 > サイトを閉鎖する のチェックを外してサイトを開始します。

#※ うまくいかない場合には

`extras/utility_tools/legacy22_check.php` を `XOOPS_ROOT_PATH` （mainfile.phpと同じディレクトリ）に置いて、ブラウザでこのファイルにアクセスしてください。ヒントが表示されるかもしれません。