Moodle 2.3のTinyMCE htmlエディタ

Moodle 2.3のTinyMCE htmlエディタ

- T N の投稿
返信数: 3

Moodle 2.3のTinyMCE htmlエディタの挙動がおかしいので、報告といいますか、相談です。

Moodle 2.3.1+ (Build: 20120802)を新規にインストールすると、「*マークが付けられたフィールドは必須入力フィールドです。」 と表示された入力欄に、TinyMCE htmlエディタで、日本語およびxx等の小数の1バイト文字を入力しても、入力が認識されません。一方、2.2.4+ (Build: 20120802)からアップグレードした場合には、正しく認識されます。環境は、いずれも、Fedora 16, MySQL 5.5.18, Apache 2.2.21で、ブラウザ(Firefox, Safari, Chrome, IE)で、テーマには依存しないようです。

新規インストールした場合に、必須入力フィールドへの入力が認識されないことがあるようなのですが、理由が分かりません。/var/log/以下には、それらしいエラーメッセージは出ていません。トピックの要約や問題の入力など「*マークが付けられたフィールドは必須入力フィールドです。」の表示がなければ、正しく入力できます。

もし何かお分かりでしたら、教えてください。よろしくお願いします。

T N への返信

Re: Moodle 2.3のTinyMCE htmlエディタ

- T N の投稿

恥ずかしながら、php.iniの

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8

の設定をしなかったのが、原因かもしれません恥ずかしい

評点平均: お役立ち度: ★★★★★★★ (1)
T N への返信

Re: Moodle 2.3のTinyMCE htmlエディタ

- udagawa mitsuru の投稿

かなり古いトピックですが、同じような問題が自分の管理しているMoodle2.3.6でも起こりましたので報告いたします。

問題の内容は同様で、フォーラムを新規作成しようとして説明の欄に日本語で文字を入力すると必須チェックが通らずフォーラムが作成できないという報告がありました。
調べてみるとHTML中に validate_mod_forum_mod_form_introeditor_5btext_5d(element) というJavascript関数が見つけられ、その中で

if (value.replace(/(<[^img|hr|canvas]+>)|&nbsp;|\s+/ig, '') == '' && !errFlag['introeditor[text]']) {
    errFlag['introeditor[text]'] = true;
    _qfMsg = _qfMsg + '\n - 必須';
  }

上記の処理が行われていました。ここでのチェックに失敗していることが直接の原因でした。Javascriptそのものに問題があるようで、<p>test</p>はokですが、<p>てすと</p>のような値が渡されるとバリデートに失敗します。

Moodleのプログラムを追いかけると lib/formslib.php の2617行目あたりで

function getValidationScript($format = null) {
        global $CFG;
        if (!empty($CFG->strictformsrequired)) {
            if (!empty($format) && $format == FORMAT_HTML) {
                return array('', "{jsVar}.replace(/(<[^img|hr|canvas]+>)|&nbsp;|\s+/ig, '') == ''");
            } else {
                return array('', "{jsVar}.replace(/^\s+$/g, '') == ''"); 
            }
        } else {
            return array('', "{jsVar} == ''");
        }
    }

があり、ここでバリデート用のJavascirpt関数を生成していました。config.phpに $CFG->strictformsrequired = false; を追記すると生成されるJavascriptが変わり、

  if (value == '' && !errFlag['introeditor[text]']) {
    errFlag['introeditor[text]'] = true;
    _qfMsg = _qfMsg + '\n - 必須';
  }

のようになり、日本語が入っていてもチェックを通るようになりました…

まだ詳しくは検証していないのですが、複数管理しているMoodle2.3サイトのうち、PHP 5.3だと初期設定でこの問題が出て、PHP 5.4だと問題が出ていないような感覚です。

udagawa mitsuru への返信

Re: Moodle 2.3のTinyMCE htmlエディタ

- udagawa mitsuru の投稿

再度Moodleの設定を確認してみたところ、[サイト管理] > [セキュリティ] > [サイトポリシー] で"必須フィールドの厳密な確認"のチェックがこの分岐条件そのものでした。説明文が"有効にした場合、フォームの必須フィールドにスペースまたは改行を入力できないようにします。"となっているため、この挙動との対応がわかりにくいです。

strictformsrequired config

評点平均: お役立ち度: ★★★★★★★ (3)