<?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;
//DB
use 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;
}
}