▼テンプレート
[EC-CUBE] 3.0.15 , 新規インストール
[レンタルサーバ] heteml
[OS] macOS High Sierra ver10.13.3
[PHP] 7,0
[ブラウザ] Google Chrome
[カスタマイズの有無] 独自のhtmlファイルから組み込み
▼質問内容
皆様いつもお世話になっております。
配送伝票番号プラグイン(3.0系)のことで質問がありますので、
どなかたご教授お願いします。
配送伝票番号プラグイン(3.0系)を導入しているのですが、ポイントプラグインと競合してしまい、配送伝票番号の更新ができない状況です。
Pointプラグインと配送伝票番号プラグインの競合について
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=18946&forum=11上記のフォーラムが同様の記事のようですが、
3.0.15の環境では記載のコードに変更を行うとエラーが発生してしまいます。
そもそも変更内容が間違っているのでしょうか。
どなたかご教授いただけないでしょうか?
念のため、変更後のソースを掲載させていただきます。
【変更前】
public function registerShipNumber(FilterResponseEvent $event)
{
$app = $this->app;
if ('POST' === $app['request']->getMethod()) {
switch ($app['request']->get('mode')) {
case 'register':
$id = $app['request']->attributes->get('id');
$TargetOrder = null;
$OriginOrder = null;
if (is_null($id)) {
// 空のエンティティを作成.
$TargetOrder = $this->newOrder();
} else {
$TargetOrder = $app['eccube.repository.order']->find($id);
if (is_null($TargetOrder)) {
throw new NotFoundHttpException();
}
}
// 編集前の受注情報を保持
$OriginOrder = clone $TargetOrder;
$OriginalOrderDetails = new ArrayCollection();
foreach ($TargetOrder->getOrderDetails() as $OrderDetail) {
$OriginalOrderDetails->add($OrderDetail);
}
$form = $app['form.factory']
->createBuilder('order', $TargetOrder)
->getForm();
$form->handleRequest($app['request']);
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();
}
default:
break;
}
}
}
【変更後】
public function registerShipNumber(FilterResponseEvent $event)
{
$app = $this->app;
if ('POST' === $app['request']->getMethod()) {
switch ($app['request']->get('mode')) {
case 'register':
$id = $app['request']->attributes->get('id');
$TargetOrder = null;
$OriginOrder = null;
if (is_null($id)) {
// 空のエンティティを作成.
$TargetOrder = $this->newOrder();
} else {
$TargetOrder = $app['eccube.repository.order']->find($id);
if (is_null($TargetOrder)) {
throw new NotFoundHttpException();
}
}
// 編集前の受注情報を保持
$OriginOrder = clone $TargetOrder;
$OriginalOrderDetails = new ArrayCollection();
foreach ($TargetOrder->getOrderDetails() as $OrderDetail) {
$OriginalOrderDetails->add($OrderDetail);
}
//変更箇所はここから
use Symfony\Component\Validator\Constraints as Assert;
・・・
$builder = $app['form.factory']->createBuilder('order', $TargetOrder);
$builder = $this->buildFormForPointPlg($builder);
$form = $builder->getForm();
・・・
private function buildFormForPoint($builder) {
$builder->add(
'use_point',
'integer',
array(
'label' => '利用ポイント',
'required' => false,
'mapped' => false,
'attr' => array(
'class' => 'form-control',
),
'constraints' => array(
new Assert\GreaterThanOrEqual(array('value' => 0)),
new Assert\Length(
array(
'max' => $this->app['config']['int_len'],
)
),
),
)
)->add(
'add_point',
'integer',
array(
'label' => '加算ポイント',
'required' => false,
'mapped' => false,
'attr' => array(
'class' => 'form-control',
),
'constraints' => array(
new Assert\GreaterThanOrEqual(array('value' => 0)),
new Assert\Length(
array(
'max' => $this->app['config']['int_len'],
)
),
),
)
);
return $builder;
}
//変更箇所はここまで
$form->handleRequest($app['request']);
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();
}
default:
break;
}
}
}