インストール時の lang と sessioncookie

インストール時の lang と sessioncookie

- Toshihiro KITA の投稿
返信数: 11
1.6以降なのか以前からなのか,インストール時に
install.php から admin/config.php に移った後,「詳細設定」の画面において,
言語(lang) の値が引き継がれないようですが,これはそういうものでしょうか。

つまり,最初の画面で 「日本語」を選択してインストールを日本語で行っても,
「詳細設定」の画面では,デフォルトが 「English」 になってしまいます。
# もちろん,ここで「日本語」を選び直せば問題ないのですが,ちょっと不自然。複雑な

また,これは 1.5 の頃から悩んでいることなんですが,
lib/defaults.php の中で,sessioncookie に値を定義しておいてから,
インストール作業を始めても,それが「詳細設定」の画面ではデフォルト値として
現れません。

# 今,http://t-kita.net/rpm/moodle/scripts/mk-moodle-instance.sh
# のようなインストール準自動化スクリプトを作成中で,ちょっと悩んでいます。
Toshihiro KITA への返信

Re: インストール時の lang と sessioncookie

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
> 最初の画面で 「日本語」を選択してインストールを日本語で行っても,
> 「詳細設定」の画面では,デフォルトが 「English」 になってしまいます。

1.6以降です。

1.6以前はすべての言語パックが同梱されていましたが、1.6以降ではdownload.moodle.orgでダウンロードしたファイルには、英語言語パックのみ同梱されています。インストール完了後、管理 >> 設定 >> 言語設定 >> 言語インポートユーティリティ で必要な言語パックをダウンロードする必要があります。

インストールを日本語で行うことができるのは、install/lang/ の中にインストールで必要なストリングのみ入った各言語のinstaller.phpというファイルがあるからです。


sessioncookieの件は、調査してみます。smile
Mitsuhiro Yoshida への返信

Re: インストール時の lang と sessioncookie

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
インストールの途中でも日本語言語パックをダウンロードすることが可能です。
添付 install.gif
Mitsuhiro Yoshida への返信

Re: インストール時の lang と sessioncookie

- Toshihiro KITA の投稿
ええと,ちょっと言葉足らずでしたが,
この日本語言語パックをダウンロードした後で出てくる画面の話だったんです。

この後,GPLの確認があって,Moodleバージョンの確認がありますよね。
そこまでは日本語メッセージなんです。

その後,「詳細設定」の画面に行くと,
「詳細設定」自体は,日本語で表示されますが,lang のドロップダウンメニューが
デフォルトで 「English」になっているので,そのまま「保存」を押してしまうと
その次の画面からは英語で表示される,ということです。
Toshihiro KITA への返信

Re: インストール時の lang と sessioncookie

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
>その後,「詳細設定」の画面に行くと,
>「詳細設定」自体は,日本語で表示されますが,lang のドロップダウンメニューが
>デフォルトで 「English」になっているので,そのまま「保存」を押してしまうと
>その次の画面からは英語で表示される,ということです。

下記のプログラムが関係しています。

lib/setup.php 512行目
    if (empty($CFG->lang)) {
        $CFG->lang = !empty($CFG->unicodedb) ? 'en_utf8' : 'en';
    }

admin/configvars.php 300行目
/// language settings
    $interface['lang'] = new configvar ( get_string('configlang', 'admin'),
        choose_from_menu(get_list_of_languages(), 'lang', $config->lang, '', '', '', true) );


admin/configvars.phpの302行目の関数choose_from_menu()で使用されている$config->langの値により、
下記のように「詳細設定」画面の言語メニューで選択される言語が決定されます。

   <option value="en_utf8" selected="selected">English (en)</option>
   <option value="ja_utf8">日本語 (ja)</option>

ですから、install.phpあたりで$CFG->langに値を入れてやると何とかなりそうです。
Toshihiro KITA への返信

Re: インストール時の lang と sessioncookie

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
>また,これは 1.5 の頃から悩んでいることなんですが,
> lib/defaults.php の中で,sessioncookie に値を定義しておいてから,
> インストール作業を始めても,それが「詳細設定」の画面ではデフォルト値として
現れません。

これはバグみたいです。

原因は下記のとおりです。

1. インストール時に lib/setup.phpが実行される。
320行目で「 $CFG->sessioncookie = ''; 」と設定されています。

[ lib/setup.php 320行目 ]
/// Set sessioncookie variable if it isn't already
    if (!isset($CFG->sessioncookie)) {
        $CFG->sessioncookie = '';
    }

2. admin/index.php 内でlib/defaults.phpの設定sessioncookieをスキップしている。
212行目で、$CFG->$nameが事前に設定されていなかったら、defaults.phpの内容を設定するという処理が行われています。
1. で $CFG->sessioncookie = ''; としていますから、sessioncookieの設定はキップされてしまいます。
ですから、defaults.phpのsessioncookieをどのような値に変えてもnullのままです。

[ admin/index.php 207行目 ]
/// Insert default values for any important configuration variables

    include_once("$CFG->dirroot/lib/defaults.php");

    foreach ($defaults as $name => $value) {
        if (!isset($CFG->$name)) {
            $CFG->$name = $value;
            set_config($name, $value);
            $configchange = true;
        }
    }


下記のようにadmin/index.phpを変更すれば大丈夫だと思います。wink
プログラム: admin/index.php
修正箇所: 207行目

[ 修正後 ]
/// Insert default values for any important configuration variables

    include_once("$CFG->dirroot/lib/defaults.php");

    foreach ($defaults as $name => $value) {
        if (!isset($CFG->$name) || $name == 'sessioncookie') {
            $CFG->$name = $value;
            set_config($name, $value);
            $configchange = true;
        }
    }

[ 修正前 ]
/// Insert default values for any important configuration variables

    include_once("$CFG->dirroot/lib/defaults.php");

    foreach ($defaults as $name => $value) {
        if (!isset($CFG->$name)) {
            $CFG->$name = $value;
            set_config($name, $value);
            $configchange = true;
        }
    }

# 上記内容は、Moodle Trackerに報告させて頂きます。

Mitsuhiro Yoshida への返信

Re: インストール時の lang と sessioncookie

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
大変失礼致しました。blush

if (!isset($CFG->$name) || $name == 'sessioncookie')  と修正した場合、詳細設定ページを表示するたびに
lib/defaults.phpのsessioncookieの値が入ってしまいますね。

下記の修正内容に変更させて頂きます。

プログラム: admin/index.php
修正箇所: 207行目

[ 修正後 ]
/// Insert default values for any important configuration variables

    include_once("$CFG->dirroot/lib/defaults.php");

    foreach ($defaults as $name => $value) {
        if (!isset($CFG->$name) || $CFG->sessioncookie == '') {
            $CFG->$name = $value;
            set_config($name, $value);
            $configchange = true;
        }
    }

[ 修正前 ]
/// Insert default values for any important configuration variables

    include_once("$CFG->dirroot/lib/defaults.php");

    foreach ($defaults as $name => $value) {
        if (!isset($CFG->$name)) {
            $CFG->$name = $value;
            set_config($name, $value);
            $configchange = true;
        }
    }
Mitsuhiro Yoshida への返信

Re: インストール時の lang と sessioncookie

- Toshihiro KITA の投稿
早速お調べ頂き,ありがとうございます。

# わざわざ $CFG->sessioncookie = '' と設定されてからインストールが始まるのは,
# インストール作業自体のセッションを張るのに必要だからなのでしょうかね?


if (!isset($CFG->$name) || $CFG->sessioncookie == '') {
の変更を加えるのは,ちょっと問題ありかと。
というのは,sessioncookie 以外の変数設定にも影響してしまうので。
例えば,$CFG->fullnamedisplay が既にセットされていたとしても,
デフォルトの値に戻されてしまいます。

多分,
if (!isset($CFG->$name) ||  ($name=='sessioncookie' && $CFG->$name == '') ) {
かな。

あるいは,どうせさらにlib/defaults.php を書き換えるなら,lib/setup.php のその箇所に所望の値を
$CFG->sessioncookie = 'mycookie'
のように書くのが結局いいのかな,と思い始めてきました。

Toshihiro KITA への返信

Re: インストール時の lang と sessioncookie

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
> if (!isset($CFG->$name) || $CFG->sessioncookie == '') {
> の変更を加えるのは,ちょっと問題ありかと。

はい、かなり問題あります。blush
$CFG->sessioncookie == '' の場合、毎回lib/defaults.phpの値がすべてセットされてしまいます。
Toshihiro KITA への返信

Re: インストール時の lang と sessioncookie

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
# わざわざ $CFG->sessioncookie = '' と設定されてからインストールが始まるのは,
# インストール作業自体のセッションを張るのに必要だからなのでしょうかね?

そう思います。

Toshihiro KITA への返信

Re: インストール時の lang と sessioncookie

- Toshihiro KITA の投稿
吉田さんの情報のおかげで所望のスクリプトが完成しました。

これで,同じサーバの中で 100個でも 200個でも セットアップが半自動で
出来ます。笑顔

http://t-kita.net/rpm/moodle/scripts/mk-moodle-instance.sh
Toshihiro KITA への返信

Re: インストール時の lang と sessioncookie

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
>これで,同じサーバの中で 100個でも 200個でも セットアップが半自動で出来ます。

mk-moodle-instance.shを拝見させて頂きました。
sessioncookieと日本語環境に関するパッチがあたりますね。
素晴らしいです。smile