プラグイン > 開発について > 売上集計プラグインに表示される商品をログインしているメンバーの商品のみにしたい |
開発について
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ゲスト |
投稿日時: 2019/4/6 13:19
対応状況: 開発中
|
売上集計プラグインに表示される商品をログインしているメンバーの商品のみにしたい [EC-CUBE] EC-CUBE 4.0.2
[レンタルサーバ] KAGOYA CLOUD 2 [OS] CentOS7 [PHP] PHP 7.1 [データベース] MySQL 5.7 [WEBサーバ] Apache 2.4.6 [ブラウザ] Google Chrome [現象] 売上集計プラグインで表示される商品をログインしているメンバーのみの表示にしたいです。 前にも同様のスレッドを作ったのですが、変更するphpは分かったもののうまく構文を書き換えることが出来ませんでした。 どのように構文を変更すればいいでしょうか。できれば追加するコードまで教えてくれれば幸いです。 |
|
umebius |
投稿日時: 2019/4/6 23:34
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: 売上集計プラグインに表示される商品をログインしているメンバーの商品のみにしたい 各受注はOrder -> OrderItem -> Product -> Creatorというように辿っていけば、登録者の情報に行き当たります。
このCreatorがログインしているユーザーと一致するかどうかで、レポートの数字を絞り込むしかないかと思います。 管理者のエンティティは色々取得方法がありますが、$this->tokenStorage->getToken()->getUser()等で取得可能 (この場合tokenStorageはTokenStorageInterfaceの依存性注入しておく)
|
ゲスト |
投稿日時: 2019/4/7 6:04
対応状況: −−−
|
Re: 売上集計プラグインに表示される商品をログインしているメンバーの商品のみにしたい エンティティの取得方法は理解できたのですが、登録者情報の辿り方がよく分かりません。
Order->OrderItem->Product->Creatorという構文でCreatorの情報を取得するということでしょうか。 |
|
umebius |
投稿日時: 2019/4/7 12:48
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: 売上集計プラグインに表示される商品をログインしているメンバーの商品のみにしたい 例えばOrderにはgetOrderItemsというゲッターメソッドがあります。
Order.phpにあるこのようなメソッドです。 これで情報を辿っていけるかと思います。 /** * Get orderItems. * * @return \Doctrine\Common\Collections\Collection|OrderItem[] */ public function getOrderItems() { return $this->OrderItems; }
|
ゲスト |
投稿日時: 2019/4/7 15:17
対応状況: −−−
|
Re: 売上集計プラグインに表示される商品をログインしているメンバーの商品のみにしたい 辿って構文は辿って確認したのですがPHPがあまり分からず、絞り込む構文を書くことができませんでした。
申し訳ないのですが、絞り込みの構文を教えてはいただけないでしょうか。急ぎの為、依頼の形でも構いません。 |
|
ゲスト |
投稿日時: 2019/4/7 20:36
対応状況: 開発中
|
Re: 売上集計プラグインに表示される商品をログインしているメンバーの商品のみにしたい あずみ.net様のEC-CUBE4の管理画面にログインしたら自分が登録した商品しか商品一覧に表示されないようにする方法を参考にコードをSalesReportServiceに追加したのですが、まだ実装することが出来ていません。どこかおかしい箇所がありましたら、助言をいただけると幸いです。
use Eccube\Doctrine\Query\WhereCustomizer; use Eccube\Doctrine\Query\WhereClause; use Eccube\Repository\QueryKey; use Eccube\Entity\Member; use Eccube\Entity\Master\Authority; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Eccube\Entity\Product; /** * @var TokenStorageInterface */ protected $tokenStorage; public function __construct(TokenStorageInterface $tokenStorage) { $this->tokenStorage = $tokenStorage; } protected function createStatements($params, $queryKey) { $qb = $this->entityManager->createQueryBuilder(); $qb ->select('oi') ->from('Eccube\Entity\OrderItem', 'oi'); if (null !== $token = $this->tokenStorage->getToken()) { // ユーザーがメンバーの場合 if($token->getUser() instanceof Member) { // メンバーが管理者ではない場合 if($token->getUser()->getAuthority()->getId() != Authority::ADMIN) { if(WhereClause::eq('p.Creator', ':creator_id', [$productid = 'creator_id' => $token->getUser()])) { return [Whereclause::eq('oi.Product', ':product_id', [$productid->getid() => 'product_id'])]; } } } } return $this; } public function getQueryKey(): string { return QueryKey::PRODUCT_SEARCH_ADMIN; } |
|
468 |
投稿日時: 2019/4/8 9:32
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 売上集計プラグインに表示される商品をログインしているメンバーの商品のみにしたい 該当プラグインのソースを読んでいないので改修内容が合っているのか判断できませんが、
改修前のfunction createStatements()は何をreturnしていますか?
|
ゲスト |
投稿日時: 2019/4/9 17:22
対応状況: −−−
|
Re: 売上集計プラグインに表示される商品をログインしているメンバーの商品のみにしたい 改修前のreturnは下記のコードで、自分はproduct.phpのCreatorクラスからcreator_idを受け取り、そのcreator_idを$tokenから受け取ったログイン中のユーザーと照合する、と解釈しています。
return [WhereClause::eq('p.Creator', ':creator_id', ['creator_id' => $token->getUser()])]; |
|
468 |
投稿日時: 2019/4/10 11:36
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 売上集計プラグインに表示される商品をログインしているメンバーの商品のみにしたい リンク先のあずみ.net様のコードは、元々あるリポジトリのQueryBuilder生成の挙動を変更する為のコードですので、
SalesReportServiceに書き加えるような記述ではないのではないかと思います。 SalesReportService内でQueryBuilderを生成している記述はありませんか? $qb->innerJoin('o.OrderItem', 'oi') ->innerJoin('oi.Product', 'p') ->addWhere('p.Creator = :creator') ->setParameter('creator', $token->getUser()); 元のQueryBuilderの記述がどうなっているか分かりませんが、 Order→OrderItem→ProductとJoinして(もしかしたら既にjoinされているかもしれません) Whereでp.Creatorとログインユーザーと比較する形で絞り込めるのではないかと思います。
|
umebius |
投稿日時: 2019/4/13 21:05
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: 売上集計プラグインに表示される商品をログインしているメンバーの商品のみにしたい QueryBuilderでJoinを行なってもあまり本質的な解決にはならないんですね。(1段階目のふるい分けにはなりますが)
その商品を"含んだ"受注を取得するだけで、他の管理者が登録した商品のデータもくっついてきてしまうので。 なので、Joinを行うよりもSaleReportServiceのconvertByProductなどの集計データを作っている部分で、 foreach やIF文を使って、Creatorで絞り込んでやってください。
|
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |