MODX Evolution 1.0.5J-r4をリリースしました
2011年6月25日 19時30分 shortlink:http://modx.jp/?id=555
アップデート時にプラグイン設定が初期化される問題を改善。また、PHPMailerの処理を見直し、一部環境で発生していたメールタイトルの文字化けを解消。PHPMailer自体も1.7.3から2.0.4へアップデートしています。
■MODX Evolution 1.0.5J Revision4 ダウンロード
http://code.google.com/p/modx-ja/downloads/detail?name=modx-1.0.5J-r4.zip
1.0.5Jの際にコア単体のアップデータが使えなくなっており、しばらく対応を保留していましたが、今回修正しました。拡張機能などのアップデートが不要な場合は、managerフォルダのみをアップロードしてから管理画面にアクセスし、グローバル設定を空更新してください。
注意事項
対応エンコードと実際に扱える文字に関して(日本語以外の文字)
MODX Evolution日本語版をUTF-8設定で利用する場合、一部のサーバ環境において、UTF-8がサポートしているはずの文字セットをフルに扱えないという報告がありました。これを受けて、できれば今回のバージョンで対応を試みる予定でしたが、検証が間に合わず対応を見送ることとしました。今回は注意喚起のみを行ないます。通常の日本語サイトを構築する場合は問題ありませんが、特定環境のサーバにおいて、UTF-8文字セット全域を扱いたいケースでは、下記の件について考慮が必要です。
MODX Evolution日本語版では、専門的なサーバ管理技術を持たないユーザでも、様々なサーバ環境で日本語を安心して利用できるようにするために、本家版とは異なるエンコード処理を採用しています。サーバにインストールされているPHPでmysql_set_charset関数を利用できる場合は、本家版と同等の結果を得られるエンコード処理を行ないますが、そうでない特定の環境では、データを入力する際に、いったんエンコードをEUC-JPに変換してから処理を行ないます。入力の直前に再びUTF-8に戻します。
このため、中国語やハングル文字、UTF-8でサポートされている一部の機種依存文字などが、特定のサーバ環境では扱えません。必要な場合は、サーバのエンコード環境を確認のうえ、コアファイルに簡単な修正を施すことで扱えるようになります。
インストール時・アップデート時に上記のような注記が表示されない場合は本件は関係ありません。
変更内容
不具合修正
- connectされていない段階でDBに接続することが原因で、エスケープ処理がmysql_escape_stringに流れるケースがあり、脆弱性として悪用される可能性があるため修正
- ページキャッシュが存在しない場合、環境によっては更新時にエラーが出ることがあるため修正
- ユーザ管理の「曜日制限」を更新保存できないため修正
- システムイベントOnManagerMainFrameHeaderHTMLBlockでhead要素内に出力される文字列がdiv要素で囲まれるため修正
- フレンドリーエイリアス設定のprefix・suffixの設定によっては誤作動を起こす可能性が高いため修正
- DocManagerのメニュー並べ替え実行後にclearCacheを実行(これを行なわないとサイトが更新されない)
- MODXのインストーラでプラグインをアップデートする際、アップデート元のプロパティコードにシングルクォートが含まれているとアップデートに失敗するため修正
- プラグインをアップデートする際、バージョンが変わるとプロパティ設定を引き継げず新規インストール扱いになってしまうため修正
- [weblogin] パスワードリマインダーの送信メールのタイトルがグローバル設定と紐付いてなかったため修正
- サンプルコンテンツのリンク間違いを修正
- リストア機能で、sqlファイルの改行コードの違いを配慮(テキストエディタで編集した時に変わる可能性があるため)
- ManagerManagerのmm_hideTemplatesルールにおいて、IEでテンプレートを隠せないバグを修正
- PHPの浮動小数点バグによる被害を回避するためのFindDangerValueメソッドが機能する状態になってなかったため修正。(※MODXに限らずほとんどのPHPアプリケーションで発生する問題なので、本来はサーバ側の対応が必要です)
- MMのルールでテンプレートIDが取得できない問題を再修正
- TinyMCEからファイルブラウザを開いた時にwavファイルをアップロードできないため修正
- [ManagerManager] &js_src_overrideパラメータのパラメータ名のtypo修正(インストールファイル)
- [weblogin] &tplパラメータでリソースIDを指定できないバグを修正
- [weblogin] グローバル設定で「xhtml形式のURL」が有効になっている場合のpreserveUrl関数の問題を修正
- Dittoのsummaryエクステンダーのstrip_tagsパラメータの処理タイミングを修正
改善
- 日本語版のみに存在するconfigにコメントを追記
(config['enable_bindings'] / config['smart_suffix'] / config['cacheable']) - アップデート時の$modx->config['custom_contenttype']の初期値更新(デフォルト値を変更していない場合のみ)
- コア単体専用のアップデータを修正(1.0.5Jで問題が発生してから対応が保留になっていました)
- インストーラのauto_template_logic処理まわりを整理・デフォルトをsiblingに
- TinyMCEアップデート(3.4.3.1)
- $modx->config['cacheable']を想定した判定を$modx->checkCache()内に実験的に追加
- 不要なパース処理を抑制
- デバッグ時に出力される不要な<br />を削除
- デバッグに用いる$modx->queryCodeの内容を詳細化。($modx->dumpSQLをOnWebPageInitイベントなどでtrueにセットすることで情報を出力できます)
- webloginを多言語対応、及び言語キーをプレースホルダ対応に
- ファイルをincludeする際のパス指定の先頭に余分なスラッシュが含まれるため修正
- システムアラート内で出力されるhr要素の不要な属性を削除
- 拡張子込みのエイリアスを入力した場合はsuffixを付加しないようにするためのconfigを実験的に追加
- magic_quotes_gpcが有効な場合のみquotes_stripper.inc.phpを読み込むように修正
- clearCache関数の処理にsynccacheクラスのemptyCacheを利用
- MODxMailerのMB関数の存在チェック判定を改善
- strip_magic_quotesの処理を調整(ただしまだ不完全。チェックボックスなどのように値を配列で渡された場合は処理しない)
- Forgot Manager LoginプラグインをPHPMailer対応
- PHPMailerまわり修正・アップデート(1.7.3→2.0.4)
- 言語ファイル修正
- [weblogin] データベースまわりの処理をDBAPIで揃える
- [weblogin] modxmailerの読み込みパスの記述を修正
- [weblogin] 一部翻訳(プレースホルダ対応)
- array_pushを用いている部分をパフォーマンス調整
- array_key_exists関数を使っている部分をパフォーマンス調整
- include→include_once(定説とは違い、そのほうがパフォーマンスがいいらしい)
- 入力フィールド(スニペット設定画面などのタイトル欄)の横幅調整
- 必須のphpバージョンを4.3.0から4.4.2に引き上げ
- file_get_contents関数互換の処理を整理(古いバージョンのphp用)
- glob関数が使えない古い環境用のコードを削除
- eformサンプルフォームをシンプル化
- upgrade.phpの不要ライブラリを削除
- jqueryを1.6.1にアップデート
- ユーザ設定画面の「住所」を「都道府県」に(誤訳のため)
- キャッシュのクリア時にページキャッシュのみを対象としてカウントするよう修正(全部クリアされていないと誤解されがちなため)
- Country List Language Fileの項目の並びを整理(日本を見つけにくいため)
- スニペットのパラメータ値で「?」を使えるようにする
- スニペットのパラメータ値で「=」を使えるようにする
- [QuickManager] colobox更新(Versionv1.3.17.1)
- document.parser.class.inc.php ソース整形及び軽微な改善(evalSnippets関数)
不具合報告・改善要望について
アップデートの手順
https://modx.jp/docs/update.html
上記を参照してください。アップデートを始める前に必ずデータベースのバックアップをとりましょう。拡張機能をアップデートする必要がない場合は、assetsフォルダを転送しないように気をつけてください。assetsフォルダを転送した場合、拡張機能もインストーラを通じてアップデートする必要があります。
次回リリースについて
現在、MODX EvolutionはMySQL4.0.2以上で動きます。古いコードを減らしてシステムをシンプルに保つために、現時点ではニーズが少ないと考えられるMySQL4.0.14未満の対応コードを整理する予定です。
本家版との調整のため、当面は控えめなアップデートになります。
スクリーンショット
▲データベースチューニングに必要なデバッグ情報の出力
$modx->dumpSQLプロパティの値をtrueにセットすることで、データベースアクセスに関する詳細なデバッグ情報を出力することができますが、クエリ文のみしか出力されないため分かりにくいのが難点でした。また、ソースの記述上はQuery1・Query2・・・というふうに連番が振られるはずが、振られていません。
上記のように、クエリを発行したスクリプトが存在するファイル名と、実行された行番号を出力するようにしました。連番が振られない問題も修正しました。
今回より、アップデート時にプラグイン設定を引き継げるようになりました。そのまま引き継ぐわけではなく、新規に加わったプロパティがある場合は追加されます。
もともと存在するプロパティは変更しないため、更新されたほうがよい部分もそのまま引き継がれます。上記の画像の例では、MODX同梱のjQueryのバージョンが1.6.1に上がったにも関わらず、QuickManagerの設定では1.5のままになっていることを示しています。いちおう、これでもほとんど問題なく動くようですが。
気になる場合は、上記のように手書きで書き換えてください。
その他
日本語版独自のconfigとして、config['smart_suffix'] ・ config['cacheable'] の2つを実験的に追加しました。いずれもグローバル設定画面では設定できず、利用したい場合はプラグインまたは簡単なコア改造を通じて有効にする必要があります。興味がある方はお試しください。
config['smart_suffix']を「1」にセットすると、エイリアスを「 rss.xml 」というふうにピリオド込みで指定した場合、グローバル設定で指定したサフィックスを付けずにURLを出力します。rss.xml.htmlといった名前にしたくない場合に用いることができます。MODX Revolutionではcontent typeとの関連付けを通じて制御する仕組みになってますが、使用頻度を考えると、そこまでシステマチックでなくてもよいというニーズもあるでしょう。
config['cacheable']を「0」にセットすると、サイト全体でキャッシュをオフにできます。テンプレートチェンジャーのような拡張機能を作りたい場合や、独自のキャッシュ機構を組み込みたい場合などに手軽かつ実用的に実装できます。通常はこの種の機能が必要な場合はOnLoadWebDocumentイベントを使いますが、キャッシュ機構を使わない前提でしか実装できず、基本的にキャッシュを使えないのが難点です。MODXは、キャッシュを使わない場合は力任せな処理を行ないますので、できればキャッシュを有効にしておきたいです。
「独自のキャッシュ機構」というのは、たとえばMODXでは基本的にリソースID単位でしかキャッシュを管理しないため、Dittoのページング処理などはキャッシュをオフにする必要があります。これを、たとえばDittoのパラメータと見られるクエリがURLに含まれる場合は、独自のキャッシュ機構にスイッチさせるなどのアイデアを盛り込むことができます。また、一般的なキャッシュ機構に見られるような「ライフタイム」を設定することもできます。うまく使えば、MODXのキャッシュの仕組みを大幅に拡張することができます。
本家版との統合時にはこれらの独自config(enable_bindingsを加えると全部で3つ)の名前が変更される可能性がありますが、その際は改めてアナウンスいたします。次の機会は1.0.6になります。もし採用されない場合も日本語版では継続します。実験的な実装ではありますが、チャレンジャーなMODXerはぜひお試しください。
以上、ご意見ありましたらフォーラムまたは問い合わせフォームからフィードバックをお願いします。
開発ベースをGithubに移行する予定でしたが、まだできてません。用意ができたらアナウンスいたします。