asamuzaK.jp

拡張子戦争は終わっていなかった

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?&amp;lang=ja&amp;t=hoge&amp;v=1.1&amp; _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_urlpermalinkに変えたらうまくいっちゃったりしない? おそるおそる再構築。 そしてTypeKey IDへと行って来い。 結果は...

ここに2国間の和平条約が締結されました(感涙)。

まとめ

plugins/remove-ext-from-permalink.pl プラグインの利用が前提。 TypeKey IDでのサインイン/サインアウトを経た上でコメント入力時にもURIから拡張子を消す(MultiViewsで対応させる)には、mt\lib\MT\App\Comments.pmの867行目にあるarchive_urlpermalinkに変更すればよい(かもしれない)。

"拡張子戦争は終わっていなかった"へのTwitter上でのコメントやRT

ツイートを取得できませんでした。Topsyで確認する

"拡張子戦争は終わっていなかった"へのコメント

コメントは寄せられていません。

コメント投稿フォーム

名前、メールアドレス、URIはいずれも任意です。 コメントは承認後に公開されます(承認されない場合もあります)。 なお、メールアドレスは公開されません。

情報の保存

"拡張子戦争は終わっていなかった"へのトラックバック

1 件のトラックバックが寄せられています。

MTアップデート時の備忘録 [asamuzaK.jp]
MTアップデート時を行う際のカスタマイズの私的備忘録

この記事にトラックバックするには、http://asamuzak.jp/cgi-bin/mt/mt-trackbacks-mmxii.cgi/20までpingを送信してください。 トラックバック送信元にこの記事への言及(リンク)がない場合は受け付けない設定にしています。