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
# のようなインストール準自動化スクリプトを作成中で,ちょっと悩んでいます。
> 最初の画面で 「日本語」を選択してインストールを日本語で行っても,
> 「詳細設定」の画面では,デフォルトが 「English」 になってしまいます。
1.6以降です。
1.6以前はすべての言語パックが同梱されていましたが、1.6以降ではdownload.moodle.orgでダウンロードしたファイルには、英語言語パックのみ同梱されています。インストール完了後、管理 >> 設定 >> 言語設定 >> 言語インポートユーティリティ で必要な言語パックをダウンロードする必要があります。
インストールを日本語で行うことができるのは、install/lang/ の中にインストールで必要なストリングのみ入った各言語のinstaller.phpというファイルがあるからです。
sessioncookieの件は、調査してみます。
> 「詳細設定」の画面では,デフォルトが 「English」 になってしまいます。
1.6以降です。
1.6以前はすべての言語パックが同梱されていましたが、1.6以降ではdownload.moodle.orgでダウンロードしたファイルには、英語言語パックのみ同梱されています。インストール完了後、管理 >> 設定 >> 言語設定 >> 言語インポートユーティリティ で必要な言語パックをダウンロードする必要があります。
インストールを日本語で行うことができるのは、install/lang/ の中にインストールで必要なストリングのみ入った各言語のinstaller.phpというファイルがあるからです。
sessioncookieの件は、調査してみます。
>その後,「詳細設定」の画面に行くと,
>「詳細設定」自体は,日本語で表示されますが,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に値を入れてやると何とかなりそうです。
>「詳細設定」自体は,日本語で表示されますが,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に値を入れてやると何とかなりそうです。
>また,これは 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を変更すれば大丈夫だと思います。
プログラム: 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に報告させて頂きます。
> 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を変更すれば大丈夫だと思います。
プログラム: 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に報告させて頂きます。
大変失礼致しました。
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;
}
}
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;
}
}
早速お調べ頂き,ありがとうございます。
# わざわざ $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'
のように書くのが結局いいのかな,と思い始めてきました。
# わざわざ $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'
のように書くのが結局いいのかな,と思い始めてきました。
吉田さんの情報のおかげで所望のスクリプトが完成しました。
これで,同じサーバの中で 100個でも 200個でも セットアップが半自動で
出来ます。
http://t-kita.net/rpm/moodle/scripts/mk-moodle-instance.sh
これで,同じサーバの中で 100個でも 200個でも セットアップが半自動で
出来ます。
http://t-kita.net/rpm/moodle/scripts/mk-moodle-instance.sh