拡張子戦争は終わっていなかった
MultiViews のための拡張子戦争が終結でみつけた plugins/remove-ext-from-permalink.pl というプラグイン。 とても優れものでありがたく使用させてもらっているが、しかし、拡張子戦争は未だ局地戦が継続していたのだった...
戦況
紛争相手国はTypeKey。 IDのサインイン/サインアウトするために出撃し(してもらい)、空爆して帰還してくると、帰還地(各エントリーのURI)には拡張子がついてくる。
出兵時に持たせている武器が悪いのか、それとも、帰還時の入国審査が悪いのか。
TypeKeyに渡すための情報を処理しているのは、mt-site.js内のwriteTypeKeyGreeting()。 そこでは、
<$MTRemoteSignInLink static="1"$>%26entry_id=' + entry_id
というコンテナタグが使用されている。
んでもって、渡されるURIは
https://www.typekey.com/t/typekey/login?&lang=ja&t=hoge&v=1.1&
_return=http://asamuzak.jp/cgi-bin/mt/mt-comments.cgi%3f__mode=handle_sign_in
%26static=1%26entry_id=1
という感じ(都合によりてきとーに改行)。
怪しそうのは、staticとentry_idあたりかなぁ。
まずはstaticの中身は、ということでMTのマニュアルを見ると
- MTRemoteSignInLink
コメント登録機能に利用されるユーザー認証で、サイン・インをするときのリンク先 URL。
- MTRemoteSignOutLink
コメント登録機能に利用されるユーザー認証で、サイン・アウトをするときのリンク先 URL。
...って、これじゃ何もわからないよ。
でもって、あれやこれやとぐぐった結果、
mt\lib\MT\Template
というディープな場所にあるContextHandlers.pmで、MTRemoteSignInLinkの処理していることがなんとかわかった。
その1303行目。
my $static_arg = $args->{static} ? "static=1" : "static=0";
...空振りorz
いつのまにか犯人捜査に
これ以上ドツボる前にstatic犯行説はさっさと取り下げ^^; entry_id犯行説を追及することに。 戦争のはずが事件捜査の刑事な気分^^;
それはさておき、サインイン/サインアウトの処理は、
mt\lib\MT\App
のComments.pmでやっているらしい。
その848行目で
# This actually handles a UI-level sign-in or sign-out request.
sub handle_sign_in {
ん? おぉ!?
Perlはさっぱりだけど、わからないなりにスクリプトを追いかけてみる。 すると...
my $target; if ($q->param('static')) { if ($q->param('static') eq 1) { require MT::Entry; my $entry = MT::Entry->load($q->param('entry_id')); $target = $entry->archive_url; $target = MT::Util::strip_index($target, $weblog); } else { $target = $q->param('static'); } } else { $target = ($app->{cfg}->CGIPath . $app->{cfg}->CommentScript . "?entry_id=" . $entry->id . ($q->param('arch') ? '&static=0&arch=1' : '')); }
もしかしてビンゴ? 867行目のarchive_urlをpermalinkに変えたらうまくいっちゃったりしない? おそるおそる再構築。 そしてTypeKey IDへと行って来い。 結果は...
ここに2国間の和平条約が締結されました(感涙)。
まとめ
plugins/remove-ext-from-permalink.pl
プラグインの利用が前提。
TypeKey IDでのサインイン/サインアウトを経た上でコメント入力時にもURIから拡張子を消す(MultiViewsで対応させる)には、mt\lib\MT\App\Comments.pmの867行目にあるarchive_urlをpermalinkに変更すればよい(かもしれない)。
"拡張子戦争は終わっていなかった"へのTwitter上でのコメントやRT
ツイートを取得できませんでした。Topsyで確認する