クラス
ComboSet
ソース ソース
ファイル: src/API/ComboSet.php
class ComboSet
{
/**
* Returns `true` if the SKU is a combo-set item, `false` otherwise
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @global \wpdb $wpdb
* @param int $skuMetaId
* @return bool
*/
public static function isComboSet($skuMetaId) {
global $wpdb;
$cst = Schema::getComboSetsTable();
$exists = $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(ID) FROM {$cst} WHERE sku_meta_id = %d",
(int)$skuMetaId
)
);
if ($exists === null) {
return Master::getErrorStore()->getErrorResponse(ErrorStore::INTERNAL_SERVER_ERROR);
}
if ((bool)(int)$exists === true) {
return true;
}
return false;
}
/**
* Marks an SKU as a combo-set item
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @global \wpdb $wpdb
* @param int $skuMetaId
* @param bool $enableItemOptions
* @param bool $enableMultiprice
* @return GenericError|ComboSetType The combo-set type, on success
*/
public static function createComboSet(
$skuMetaId,
$enableItemOptions = Schema::ENABLE_ITEM_OPTIONS_DEFAULT,
$enableMultiprice = Schema::ENABLE_MULTIPRICE_DEFAULT
) {
global $wpdb;
$skuMetaId = (int)$skuMetaId;
$postId = Utils::getSkuPostId($skuMetaId);
if ($postId instanceof GenericError) {
return $postId;
}
$exists = self::isComboSet($skuMetaId);
if ($exists === true) {
return Master::getErrorStore()->getErrorResponse(ErrorStore::COMBO_SET_ALREADY_EXISTS);
}
$isgitem = GroupItem::skuIsGroupItem($skuMetaId);
if ($isgitem instanceof GenericError) {
return $isgitem;
}
if ($isgitem === true) {
return Master::getErrorStore()->getErrorResponse(ErrorStore::SKU_IS_COMBO_SET_GROUP_ITEM);
}
$curtime = Utils::getCurrentUTCDateTimeString();
$res = $wpdb->insert(
Schema::getComboSetsTable(),
[
'post_id' => (int)$postId,
'sku_meta_id' => $skuMetaId,
'enable_item_options' => (int)$enableItemOptions,
'enable_multiprice' => (int)$enableMultiprice,
'created_at' => $curtime,
'updated_at' => $curtime,
],
['%d', '%d', '%d', '%d', '%s', '%s']
);
if ($res === false) {
return Master::getErrorStore()->getErrorResponse(ErrorStore::INTERNAL_SERVER_ERROR);
}
return new ComboSetType(
$wpdb->insert_id,
$skuMetaId,
[],
$enableItemOptions,
$enableMultiprice,
$curtime,
$curtime
);
}
/**
* Deletes all data associated with a combo-set item and unlinks from the SKU
*
* This method will return `0` if no combo-set exists for the `$comboSetId` provided
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @global \wpdb $wpdb
* @param int $comboSetId
* @return GenericError|int Number of rows deleted on success
*/
public static function deleteComboSet($comboSetId) {
global $wpdb;
$cst = Schema::getComboSetsTable();
$res = $wpdb->delete($cst, ['ID' => (int)$comboSetId], ['%d']);
if ($res === false) {
return Master::getErrorStore()->getErrorResponse(ErrorStore::INTERNAL_SERVER_ERROR);
}
return (int)$res;
}
/**
* Returns a `\Aivec\Welcart\Extensions\ItemComboSet\Types\ComboSet` instance given
* its SKU meta ID
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @global \wpdb $wpdb
* @param int $skuMetaId
* @return GenericError|ComboSetType
*/
public static function getComboSetBySkuMetaId($skuMetaId) {
global $wpdb;
$postId = Utils::getSkuPostId($skuMetaId);
if ($postId instanceof GenericError) {
return $postId;
}
$cst = Schema::getComboSetsTable();
$res = $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(ID) FROM {$cst} WHERE sku_meta_id = %d",
(int)$skuMetaId
)
);
if ($res === null) {
return Master::getErrorStore()->getErrorResponse(ErrorStore::INTERNAL_SERVER_ERROR);
}
if ((bool)(int)$res === false) {
return Master::getErrorStore()->getErrorResponse(
ErrorStore::COMBO_SET_NOT_FOUND_BY_SKU_META_ID,
[$skuMetaId],
[],
[$skuMetaId]
);
}
$row = $wpdb->get_row(
$wpdb->prepare(
"SELECT * FROM {$cst} WHERE sku_meta_id = %d",
(int)$skuMetaId
),
ARRAY_A
);
if ($row === null) {
return Master::getErrorStore()->getErrorResponse(ErrorStore::INTERNAL_SERVER_ERROR);
}
return new ComboSetType(
(int)$row['ID'],
$skuMetaId,
ComboGroup::getAllComboGroupsByComboSetId((int)$row['ID']),
(bool)$row['enable_item_options'],
(bool)$row['enable_multiprice'],
$row['created_at'],
$row['updated_at']
);
}
/**
* Returns a `\Aivec\Welcart\Extensions\ItemComboSet\Types\ComboSet` instance given
* its ID
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @global \wpdb $wpdb
* @param int $comboSetId
* @return GenericError|ComboSetType
*/
public static function getComboSetById($comboSetId) {
global $wpdb;
$comboSetId = (int)$comboSetId;
$cst = Schema::getComboSetsTable();
$res = $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(ID) FROM {$cst} WHERE ID = %d",
$comboSetId
)
);
if ($res === null) {
return Master::getErrorStore()->getErrorResponse(ErrorStore::INTERNAL_SERVER_ERROR);
}
if ((bool)(int)$res === false) {
return Master::getErrorStore()->getErrorResponse(
ErrorStore::COMBO_SET_NOT_FOUND_BY_ID,
[$comboSetId],
[],
[$comboSetId]
);
}
$row = $wpdb->get_row(
$wpdb->prepare(
"SELECT * FROM {$cst} WHERE ID = %d",
$comboSetId
),
ARRAY_A
);
return new ComboSetType(
(int)$row['ID'],
(int)$row['sku_meta_id'],
ComboGroup::getAllComboGroupsByComboSetId((int)$row['ID']),
(bool)$row['enable_item_options'],
(bool)$row['enable_multiprice'],
$row['created_at'],
$row['updated_at']
);
}
/**
* Returns instance of \Aivec\Welcart\Extensions\ItemComboSet\Types\ComboSet if found,
* `GenericError` otherwise
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param int $post_id Post ID is required because SKU codes are not unique
* @param string $sku_code **Must be decoded**
* @return GenericError|ComboSetType
*/
public static function getComboSetFromSkuCode($post_id, $sku_code) {
$sets = self::getAllComboSetsForPostId($post_id);
if (empty($sets)) {
return Master::getErrorStore()->getErrorResponse(
ErrorStore::COMBO_SET_NOT_FOUND_BY_SKU_CODE,
[$post_id, $sku_code]
);
}
foreach ($sets as $set) {
if ($set === null) {
continue;
}
$skudata = $set->getSkuData();
if ($skudata['code'] === $sku_code) {
return $set;
}
}
return Master::getErrorStore()->getErrorResponse(
ErrorStore::COMBO_SET_NOT_FOUND_BY_SKU_CODE,
[$post_id, $sku_code]
);
}
/**
* Returns a key-value list of all combo-sets associated with a post ID where key is the SKU
* meta ID and value is an instance of `\Aivec\Welcart\Extensions\ItemComboSet\Types\ComboSet`
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @global \wpdb $wpdb
* @param int $postId
* @return ComboSetType[]
*/
public static function getAllComboSetsForPostId($postId) {
global $wpdb;
$skust = usces_get_tablename('usces_skus');
$skuMetaIds = $wpdb->get_results(
$wpdb->prepare(
"SELECT meta_id FROM {$skust} WHERE post_id = %d",
(int)$postId
),
ARRAY_N
);
$combos = [];
foreach ($skuMetaIds as $metaId) {
if (!isset($metaId[0])) {
continue;
}
$skuMetaId = $metaId[0];
$combo = self::getComboSetBySkuMetaId($skuMetaId);
if ($combo instanceof GenericError) {
$combo = null;
}
$combos[$skuMetaId] = $combo;
}
return $combos;
}
}
- createComboSet — Marks an SKU as a combo-set item
- deleteComboSet — Deletes all data associated with a combo-set item and unlinks from the SKU
- getAllComboSetsForPostId — Returns a key-value list of all combo-sets associated with a post ID where key is the SKU meta ID and value is an instance of `\Aivec\Welcart\Extensions\ItemComboSet\Types\ComboSet`
- getComboSetById — Returns a `\Aivec\Welcart\Extensions\ItemComboSet\Types\ComboSet` instance given its ID
- getComboSetBySkuMetaId — Returns a `\Aivec\Welcart\Extensions\ItemComboSet\Types\ComboSet` instance given its SKU meta ID
- getComboSetFromSkuCode — Returns instance of \Aivec\Welcart\Extensions\ItemComboSet\Types\ComboSet if found, `GenericError` otherwise
- isComboSet — Returns `true` if the SKU is a combo-set item, `false` otherwise