<?php/*ファイル名:getProductCategoryService.php処理概要:対象URL、対象データベースのidから商品カテゴリを取得するURLから商品情報を取得し商品カテゴリidとカテゴリ名を返す。カテゴリ名はkintoneとDBで表記ゆれがあるためkintoneに合わせる作成年月日:2023/08/31作成者:a.tojo修正年月日:2024/07/11 k.saito修正内容:エアコンを、エアコン(標準工事)とし、複製して、エアコン(2階下ろし工事)とする。*/namespace Customize\Service;use Doctrine\ORM\EntityManagerInterface;use Symfony\Component\HttpFoundation\RequestStack;use php\common\ErrNotifi;//DBuse Eccube\Entity\ProductCategory;use Eccube\Entity\ProductClass;use Eccube\Entity\Category;class getProductCategoryService{ /** * @var EntityManagerInterface */ protected $entityManager; /** * @var RequestStack */ protected $requestStack; public function __construct( EntityManagerInterface $entityManager, RequestStack $requestStack ) { $this->EntityManager = $entityManager; $this->requestStack = $requestStack; } //DBとkintoneに表記ゆれがあるため。 //キーがDBの名前で値がkintoneスキルアプリ中分類の名前 //カレンダー、画像アップロード画面、案件アプリ登録時に使用 public function settingCategoryData() { //書かれていないものはECCUBEカテゴリ名、kintoneスキルアプリ中分類が同じとする $settingData = []; $settingData['エアコン(2階下ろし工事)'] = 'ルームエアコン(2階下ろし工事)'; $settingData['エアコン(標準工事)'] = 'ルームエアコン(標準工事)'; // $settingData['エアコン'] = 'ルームエアコン'; //$settingData['トイレ'] = 'トイレ'; $settingData['蛇口(水栓)'] = '蛇口'; $settingData['洗面台・洗面化粧台'] = '洗面化粧台'; //$settingData['ガス給湯器'] = '給湯器'; //$settingData['エコキュート'] = 'エコキュート'; //$settingData['レンジフード'] = 'レンジフード'; $settingData['浴室乾燥機・浴室暖房器・浴室換気扇'] = '浴室換気乾燥暖房機'; //$settingData['IHクッキングヒーター'] = 'IHクッキングヒーター'; //$settingData['ビルトインガスコンロ'] = 'ビルトインガスコンロ'; return $settingData; } //対象URLから商品情報を取得し商品カテゴリidとカテゴリ名を返す。 public function getCategoryFromURL() { $data = []; //クエリから商品情報を取得 $request = $this->requestStack->getMainRequest(); $urlPath = $request->getPathInfo(); // URLパスをスラッシュで分割して、商品IDを取得 $urlParts = explode('/', trim($urlPath, '/')); $productID = end($urlParts); //dump($productID); $data = $this->getCategory($productID); return $data; } //DB:dtb_product_classのidから商品情報を取得し商品カテゴリidとカテゴリ名を返す。 //kintone予定アプリの仮予約時のレコードタイトルに使用 public function getCategoryFromProductClassId($productClassId) { //dtb_product_classのidからproduct_idを取得する $productClass = $this->EntityManager->getRepository(ProductClass::class)->find($productClassId); //findBy(['Product' => $productClassId]); $productID = $productClass->getProduct()->getId(); //dtb_product_categoryにproduct_idを渡しcategory_idを取得する $data = $this->getCategory($productID); dump($data); return $data['name']; } //product_idからカテゴリ名とカテゴリidを返す public function getCategory($productID) { log_debug('getCategory start'); $ProductCategoryData = $this->EntityManager->getRepository(ProductCategory::class)->findBy(['Product' => $productID]); //dump($ProductCategoryData); if (count($ProductCategoryData) >= 1) { foreach ($ProductCategoryData as $ProductCategoryDatas) { $categoryId[] = $ProductCategoryDatas->getCategoryId(); } } else { log_info('エラー'); } //dump($categoryId); //DB:dtb_categoryのデータ foreach ($categoryId as $category) { $categoryData = $this->EntityManager->getRepository(Category::class)->find($category); //dump($categoryData->getParent()); $settingData = $this->settingCategoryData(); //サブカテゴリは無視 if ($categoryData->getParent() === null) { $id = $categoryData->getId(); $name = $categoryData->getname(); if (array_key_exists($name, $settingData)) { $name = $settingData[$name]; } $data['id'] = $id; $data['name'] = $name; } } log_info('設定されたカテゴリ', [$data]); log_debug('getCategory end'); return $data; }}