MT::App::CMSアプリケーションのコールバック(アプリケーション・レベル)について説明します。
Movable Typeで表示されるポップアップの再構築ダイアログには、再構築オプションのドロップダウン・リストがあります。ここに、プラグインが提供するカスタムのオプションを追加できます。たとえば、投稿者別アーカイブの作成に用いるテンプレートの再構築を行うオプションをプラグインで提供したい、といった場合に使用します。
再構築オプションのリストに表示するラベルを指定します。
カスタムの再構築オプションを選択した際に実行するコードを指定します。
オプション固有の識別子を指定します(省略可能。省略した場合にはlabelをもとに生成されます)。
このアプリケーション・メソッドの他に、追加の再構築オプションをさらにカスタマイズするためのRebuildOptionsというコールバックを使うことができます。このコールバックは、アクティブなユーザーまたはブログに固有の項目をリストに追加する必要があるときに有効です。
callback($eh, $app, ¥@options)
RebuildOptionsは、Movable Typeの再構築ダイアログで表示する、再構築オプションの追加項目の配列を制御します。この配列はハッシュ・リファレンスを要素に持ち、次の各項目が指定できます。
カスタムの再構築オプションの実行時に実行するコードを指定します。
再構築オプションのリストに表示するラベルを指定します。
このオプション固有の識別子を指定します(省略可能。省略した場合にはlabelを元に生成されます)。
エントリー保存時、そのエントリーの構成要素(たとえばカテゴリーなど)を保存したあとに実行します。
sub cms_post_entry_save($eh, $app, $entry, $original) {
...
}
下位互換性を維持するため、CMSPostEntrySaveとAppPostEntrySaveはCMSPostSave.entryへのエイリアスとなっています。
次のように、すべてのオブジェクト型には、その型用に定義されたコールバックのセットがあります。次のリストの各項は、アンダースコアに続いてオブジェクト型を付加することで、コールバック名となります。たとえばCMSViewPermissionFilter_blog、CMSPostSave_templateといった形です。typeにあてはまる値は、CMSアプリケーションの_typeクエリー・パラメーターに渡されるものと同じです。どの_typeが特定のMT::Objectサブクラスに対応するのかわからない場合には、次のリストを参照してください。
author => MT::Author
comment => MT::Comment
entry => MT::Entry
template => MT::Template
blog => MT::Blog
notification => MT::Notification
templatemap => MT::TemplateMap
category => MT::Category
banlist => MT::IPBanList
ping => MT::TBPing
ping_cat => MT::TBPing
これらのオブジェクト型に対応するコールバックは次の通りです。
呼び出し方は次の通りです。
callback($eh, $app, $id, $obj_promise)
ここで$idは、オブジェクトが存在する場合にはそのIDとなり、その型のオブジェクトを新規に作る場合にはundefとなります。$obj_promiseはオブジェクト自身の遅延プロミスです。必要があれば、$obje_promise->forceでオブジェクトを取得することができますが、通常はその必要はありません(MT::Promiseを参照してください)。falseを返すと、処理を中断して、ユーザーにそのオブジェクトを参照する権限がないことを伝えるメッセージを表示します。
callback($eh, $app, $obj)
呼び出し方は次の通りです。
callback($eh, $app, $id)
ここで、$idは、オブジェクトが存在する場合にはそのIDとなり、その型のオブジェクトを新規に作る場合にはundefとなります。この時点ではオブジェクトが存在していない可能性があることに注意してください。リクエストはアプリケーションのクエリー・パラメーターを使って解釈され、$app->param()メソッドで参照することができます。CMSSavePermissionFilterコールバックは安全、つまりデータベースに変更を加えないものである必要があります。falseを返すと、処理を中断して、ユーザーにそのオブジェクトを変更する権限がないことを伝えるメッセージを表示します。ユーザーがスーパーユーザーの場合には、このメソッドの呼び出しは行われません。
このコールバックにより、権限がないという以外の理由でリクエストを拒否することができます。呼び出し方は次の通りです。
callback($eh, $app)
falseの値を返すとリクエストを拒否します。拒否した理由をユーザーに伝えるため、$ehオブジェクトを通じてエラーを返すのが望ましいでしょう。オブジェクトがまだ生成されていない可能性があることに注意してください。操作は$app->param()を使って$appオブジェクトのクエリー・パラメーターを参照することにより、解釈されます。CMSSaveFilterコールバックは安全、つまりデータベースに変更を加えないものである必要があります。
callback($eh, $app, $obj, $original)
$objと$originalは、それぞれ、保存しようとしているオブジェクトと、リクエスト開始時のそのオブジェクトの状態を保持します。このことにより、ユーザーのリクエストでどのような変更が行われようとしたかを、コールバックが知ることができます。リクエストが新しいオブジェクトを作成しようとした場合、$originalは有効なオブジェクト・リファレンスにはなりますが、そのオブジェクトは空になります。そのクラスのnewメソッドを呼び出したときの戻り値と同じになります。
callback($eh, $app, $obj, $original)
$objと$originalは、それぞれ保存しようとしているオブジェクトと、リクエスト開始時のそのオブジェクトの状態を保持します。コールバック呼び出し時には、$objという新しいオブジェクトが既にデータベースにコミットされています。通知や静的ページの再構築といった事後処理を行うのに便利なタイミングです。
callback($eh, $app, $obj)
$objはデータベースから削除されたばかりのオブジェクトを保持します。削除されたオブジェクトに関連したデータを削除するときに便利です。
callback($eh, %params)
このコールバックは、ユーザーがブログにファイルをアップロードするたびに呼び出されます。このコールバックは、アップロードしたファイルの種別に関係なく、1ファイルごとに呼び出されます。ユーザーがアップロードしたファイルが画像の場合には、CMSUploadFileとCMSUploadImageの両方のコールバックが呼び出されます。
ブログに保存されたファイルのフルパスです。
ブログに保存されたファイルのURLです。
ファイルのサイズ(バイト単位)です。
'image'、'file'あるいは'thumbnail'のいずれかです。
アップロードされたファイルに関連したMT::Blogオブジェクトです。
callback($eh, %params)
このコールバックは、アップロード画像ごとに呼び出されます。ユーザーがアップロード画像のサムネイルを作成する場合、このコールバックはオリジナルのアップロード画像とサムネイルにつき1回ずつ、計2回呼び出されます。
アップロードされた画像のフルパスとファイル名です。
アップロードされた画像の完全なURLです。
アップロードされた画像のサイズ(バイト単位)です。
'image'または'thumbnail'(サムネイル生成の場合)のいずれかです。
画像の高さ(ピクセル単位)です。Image::Sizeモジュールがある場合のみ使用可能です。
画像の幅(ピクセル単位)です。Image::Sizeモジュールがある場合のみ使用可能です。
Image::Sizeモジュールが判別した画像識別子です。通常、"GIF"、"JPG"または"PNG"のいずれかです。
その画像と関連するブログのMT::Blogオブジェクトです。