EC-CUBE3 (3.016)配送伝票番号プラグインに伝票番号が保存されない。

序章:一寸にも足らない戯言

最近かじり始めたEC-CUBEだが、なかなかすんなり行かない。進もうとする道が返す返すも行き止まりで、また戻って別の道を探すか無理やりよじ登る事を繰り返しといった試行錯誤で、かなり苦労している。

そんなこんなでやっとリリース間近になってから、発送済みメールがデフォルトで付属していないという事が判り、慌ててプラグインを探すとなんとか無料で存在したが、「3.015バージョンまでしか対応していないから動かないかも」的な、これまた無責任なメッセージを横目に動く事を祈りながらインストールしてみたが、やはりうまく動かない。

入力欄は表示されるが、実際には伝票ナンバーが保存されない。

うぬぬ。まずい。時間がない。

フォーラムも機能してない

フォーラムを探すが、半年前位に同じような質問があったが誰も返事を書いていない(というかステータスが保留・・・?)ので落胆。プラグインは良くわかってなかったが、なんとか調べてみるとフォーム入力チェック部分で弾かれていた事がわかった。

原因

「/app/plugin/ShipNumber/shipNumberEvent.php」の100行目辺りから

if ($form->isValid()) {//←このバリデートが死んでる

$ship_number = $form->get('content')->getData();

$order_id = $app['request']->attributes->get('id');

$OrderContent = $app['eccube.plugin.repository.ship_number']->find($order_id);

if (is_null($OrderContent)) {
$OrderContent = new \Plugin\ShipNumber\Entity\ShipNumber();
}

$Order = $app['eccube.repository.order']->find($order_id);
$OrderContent
->setShipNumber($ship_number)
->setOrder($Order)
->setOrderId($Order->getId());

$app['orm.em']->persist($OrderContent);
$app['orm.em']->flush();
}

このバリデート(入力チェック)でFalseが返ってくるので、その下にある肝心のデータベース書き込みジョブがすっ飛ばされているという事だった。

暫定回避策

このFalseが返ってくる原因を究明するのに時間がかかりそうだったので、暫定処置としてこのIf文をコメントアウトする事で、無事保存が出来、メールも正常に飛ばす事ができた。

原因は追って調べるとして、データベースの伝票番号データタイプはlongtextなので、動作テストを繰り返しまたが問題なく、取り敢えずは入力チェックをしてなくても大丈夫じゃないかと勝手に結論付け。

ただ、困ったことに、メールテンプレートは、プラグインのインストールを繰り返す度に追加されて行く。最初、試行錯誤でインストール方法が悪いと思い、何度も追加と削除を繰り返した結果、同じテンプレートが山ほど出来てた(泣)

メール送信をしていない場合は、「/app/plugin/Migration/ShipNumber/Version20150829190000.php」の30行目

// 送信履歴で使用するため、削除できない
//$this->connection->delete('dtb_mail_template', array('name' => '発送メール'));

のコメントを外してプラグインを削除すればこのテンプレートだけバッサリ消える。(データベースから直接でも同じか?)必要なら、後でソースのコメントとしてを戻せばいい。

ただ、このコメントにもあるように、削除できないのは理論として分かるが、設計としてどうなのか。

考察

去年末に私がこの3.0を採用した直後に4.0がリリースされ、この辺りの使い勝手が改善されているのだろうか?3.0がリリースされて暫く経ってもこの有様なので、新しい4.0は恐ろしくて手が出せないというのが本音。しかもバージョンが上がっても、周りが着いてきていないという状況に閉口してしまう。

フォーラムも、このEC-CUBEの運営側モデレータが責任もって対応しないと、ユーザも信頼も付かず衰退するのではないかと考える。フリーだし無料だし文句言うなというかもしれないが、そんなものは趣味の範疇であり、企業、プロとしては迷惑極まりなく、これを商売の種とするなら猶更だと憤りを禁じ得えない。