新年早々の非互換対応
昨年から先送りしていた「mediawiki」のマイナーバージョンアップ(2020/12/18リリース)、セキュリティリリースということなので見送るよりマイナーであってもバージョンアップした方が良いと思い、新年早々ですがバージョンアップすることに。通常の手順で進めると、これまでのバージョンアップ時と違い途中でエラーも出ずに順調にバージョンアップ完了!と思いきや、確認のためにサイトを表示してみたところエラーが出ているではありませんか!どうやら抜粋表示などで利用している「DynamicPageList」が非互換を起こしているようでした。エクステンションのサイトで確認したところ「DynamicPageList」はまだ「1.35」対応していないので本番環境には適用しないで下さいと書いてある。そうなんだーと一度は従ってみたものの、なんとなく癪に障るので少しソースを見てみることに、ちなみにここまでの対応はテスト環境での実施なので本番環境には影響はありません。
エラーの内容はデータベースアクセス時のパラメータの中にある「rev_user」が存在しない、というような意味だったので、まずはデータベースのテーブルを見てみます。該当するテーブルは「xxx_revision」です。エラーが出るのだからそのカラムが無いのは当然と言えば当然ですが、やはり存在しておりません。一つ前のバージョンまでは下位互換のために存在していたようですが、このバージョンからは仕様通りのようです。「rev_user」は何のために存在しているかというと、記事を更新した時のユーザーを記録するためのようで、今回使いたい用途も記事の更新記録を表示する際に、誰が更新したかわかるようにするものでした。新しいテーブルなども調べてみましたが、直接的に「rev_user」を代替するカラムは存在せず、別テーブルにリビジョンに対する更新ユーザーのIDを保持するカラムがありましたが、本家の更新待ちだと思うので、今の時点ではそこまで大きく改変するつもりではなかったので、今回のバージョンアップでは「更新者」を省くことにしました。変更点はだいたい以下の通り。
case 'user': $sSqlRevisionTable = $sRevisionTable . ', '; // $sSqlRev_user = ', rev_user, rev_user_text, rev_comment'; $sSqlRev_user = ', rev_actor'; break;
if ( $bAddUser || $bAddAuthor || $bAddLastEditor || $sSqlRevisionTable != '' ) { // $sSqlRev_user = ', rev_user, rev_user_text, rev_comment'; $sSqlRev_user = ', rev_actor'; }
if ( $bAddUser || $bAddAuthor || $bAddLastEditor || $sLastRevisionBefore . $sAllRevisionsBefore . $sFirstRevisionSince . $sAllRevisionsSince != '' ) { // $dplArticle->mUserLink = '[[User:' . $row->rev_user_text . '|' . $row->rev_user_text . ']]'; $dplArticle->mUserLink = '[[User:' . $row->rev_actor . '|' . $row->rev_actor . ']]'; // $dplArticle->mUser = $row->rev_user_text; $dplArticle->mUser = $row->rev_actor; // $dplArticle->mComment = $row->rev_comment; }
DPLが提供するオプションの使い方によって関連するコードが異なるので、今回のこの変更はあくまでも現状のオプションを使用した抽出・抜粋の場合のみ動作します。
正式に「1.35」対応するまで「最近の更新」コーナーで表示していた「サイズ、更新日、更新者」のうち「更新者」を表示しない設定としています。