Mediaプラグインのver.1.2->1.3バージョンアップ

CakePHPをver.1.3にアップしたのに伴い、
1.2時代から導入+拡張コンポーネント入れて独自遣いしていた、Mediaプラグインも、1.3b*1にアップデートしました。

その際の、トラブル解消過程のメモです。


* 注
1.「独自拡張」由来の不具合が混ざっているかもしれません。
2.アップデートしながらのメモなので・・・ひょっとすると、現状ではメモ外での修正しなおし・解決済み項目あるかもしれません・・・


異論歓迎(^^;;)



ベースCakePHPの1.2->1.3バージョンアップにともない、
Mediaプラグイン自体のソースも0.6->1.3(β)に置き換え。
しかし、それだけではエラーがでる箇所がありました。


Mediaプラグイン1.3で、公式ドキュメントなどが行方不明になってるので苦労しましたが、
ダウンロードされないdocディレクトリに、多少情報がありました。
https://github.com/davidpersson/media/blob/1.3/docs/CHANGES-1.3x
この情報から、ver1.3バージョンアップに伴う、主な変更点。

  1. ヘルパー名が Medium から Media に変更

コントローラのヘルパー設定を変更。

var $helpers = array(
-               'Media.Medium',
+               'Media.Media',

view中の$medium(あるいはヘルパー中の$this->Medium)は、$media($this->Media)に書き換え、の二点が必須。

  1. Behavoirの構成変更

 MediaBehavoirがなくなり、代わりに coupler, generator, metaの3つのBehavoirになっています。
 それぞれの動作は概ね以下の通りなので、必要に応じてモデルの$actsAsに追加します。

    1. generator

 Versionファイルの生成

    1. coupler

 複数のAttachmentを生成 
  → これを導入すると・・・saveAllなどで複数データをモデルを同時に保存している場合、file添付がないと、添付の無いデータは削除されるようになってしまいます!

    1. meta

 ファイル種類などのチェック

また、TransferBehavoirも動作が少々変更されている様子。
拡張などでBehavoirをimportして使用している場合等は、変更が必要そうです。


私の場合、makeVersion()を、画像閲覧時に別個行う改修をしていたので、
これがMediaからGeneratorに移動になった箇所などを直しました。

  1. 設定の変更

上記URLでは「簡略化されました」のようにアッサリ書いてますが・・・
media/config/core.phpみると、結構、かなり変わってます。
ざっと見た限りでも、

    1. Mime_Type設定
    2. Versionファイル作成設定書式の変更

core.phpの設定参考に改修など入れてる場合、新core.phpの内容は確認必須です。
 

  1. その他

 その他、上記URLで載ってなかった変更点など。

  1. attachmentsの内容変更

dirnameが transfer/img ->img になっている

  1. makeVersionsの設定

ファイルアップロードと同時にVersionファイルを作るか否かの設定、
Arrachmentモデルの

$this->actsAs['Media.Media']['makeVersions'] (デフォルトでtrue)

は、ver.1.3ではなくなったようです。

MediaBehavoirに

var $_defaultSettings = array(
'makeVersions' => true,
);

という設定がありますが、関係ないようです。


ソースを読んだ解釈の限り、
VersionファイルはGeneratorBehavoirのafterSave()〜make()で実行され、
ON/OFFの設定は、無いようです・・・。*2

  1. 保存ファイル名設定

旧版Mediaプラグインでは、保存するファイル名の規則を、Attachmentモデル内、

$this->actsAs['Media.Transfer']['destinationFile'] 

に設定できました。

しかしver.1.3にこの設定を入れると、

TransferBehavior::setup - The `destinationFile` settings has been removed in favor of the `transferTo()` callback. Implement the method in the `Attachment` model to get custom destination paths. [APP/plugins/media/models/behaviors/transfer.php, line 108]

 というWarninigが出ます。

ハッキリしないのですが、ver1.3では、ファイル名規則の設定機能がなくなった様です。
基本的に元のファイル名と同じ名前でアップロード。
もし、同じファイル名で既にアップ済みの場合は、
 元の名前_2以降の通し番号
に、なります。


元のファイル名ではなく独自の名称で保管したい場合、以下の参考サイトのように、TransferBehaboirのtransferTo()を改修するとよいようです。
CakePHP Media Plugin version 1.3, UUID filenames - Stack Overflow

    1. baseDirectory設定

Mediaプラグイン1.3βを導入すると、以下のNoticeがでます。

Notice (8): Undefined index: baseDirectory [APP/plugins/media/models/behaviors/media.php, line 97]

media.phpの97行目付近を見ると、Media.TransferのbaseDirectory設定がないためのエラーのようですが、
しかし、上記の変更点ドキュメントを見ると、「baseDirectory設はtransferDirectoryに変更された」とあります。

The @baseDirectory@ setting has been renamed to @transferDirectory@ to provide consistency and less confusion see http://github.com/davidpersson/media/issues#issue/28.


なお、上記で引用されているURLを見ると、attanchment.phpの$actAsで、Media.TransferのbaseDirectoryデフォルト値が設定されいるはずなのですが、
実際のソースでは、この箇所がbaseDirectoryになっています。
そして、Media.TransferのbaseDirectoryを設定すると、今度はWarningになります。

Warning (512): TransferBehavior::setup - The `baseDirectory` settings has been renamed to `transferDirectory`. [APP/plugins/media/models/behaviors/transfer.php, line 113]


以上のことから推測するに、
Mediaプラグインの方針としては、TransferBehaviorではtransferDirectory。
media.phpのこの箇所で、baseDirectoryが残ってしまっている方がミスなのではないかと思います。

暫定的に、改修しておきました。
APP/plugins/media/models/behaviors/media.php, line 97付近

/* Interact with Transfer Behavior */
if (isset($Model->Behaviors->Transfer)) {
	$transferSettings = $Model->Behaviors->Transfer->settings[$Model->alias];
//	$config['baseDirectory'] = dirname($transferSettings['baseDirectory']) . DS;
	$config['transferDirectory'] = dirname($transferSettings['transferDirectory']) . DS;
	$config['createDirectory'] = $transferSettings['createDirectory'];
}