Files
grzanieplus.pl/plugins/appProductAttributesPlugin/lib/appExportAttributesPeer.class.php
2025-03-12 17:06:23 +01:00

96 lines
3.4 KiB
PHP

<?php
class appExportAttributesPeer {
const PRODUCT_CODE = 'st_product.code';
public static function doCount(Criteria $c) {
return ProductPeer::doCount(new Criteria());
}
public static function doSelect(Criteria $c) {
$cr = new Criteria();
$cr->setLimit($c->getLimit());
$cr->setOffset($c->getOffset());
$products = ProductPeer::doSelect($cr);
$variantSeparator = stConfig::getInstance('appProductAttributeBackend')->get('import_export_variant_separator', '|');
$results = array();
$con = Propel::getConnection();
foreach ($products as $product) {
$attributes = self::doSelectArrayByProduct($product);
foreach ($attributes as $attributeId => $attribute) {
$record = new appExportAttributes();
$record->setProductCode($product->getCode());
$record->setProductName($product->getName());
$record->setAttributeName($attribute['name']);
$record->setAttributeId($attributeId);
$sql = "SELECT
GROUP_CONCAT(pav.opt_name SEPARATOR ' $variantSeparator ') as variantName,
GROUP_CONCAT(pav.opt_value SEPARATOR ' $variantSeparator ') as variantValue
FROM
app_product_attribute_has_variant pahv,
app_product_attribute_variant_has_product pavhp,
app_product_attribute_variant pav
WHERE
pahv.variant_id = pav.id AND
pav.id = pavhp.variant_id AND
pavhp.PRODUCT_ID = " . $product->getId() . " AND
pahv.attribute_id = " . $attributeId;
$rs = $con->executeQuery($sql);
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$rs->next();
$row = $rs->getRow();
$record->setVariantName($row['variantValue']);
if ($attribute['type'] == 'C')
{
$record->setVariantName($row['variantName']);
}
if ($attribute['type'] == 'B')
{
$record->setVariantName(isset($row['variantValue']) ? 'Y' : 'N');
}
$results[] = $record;
}
}
return $results;
}
public static function doSelectOne($c) {
$c = clone $c;
return ProductPeer::doSelectOne($c);
}
public static function doSelectArrayByProduct($product) {
$ranges = appProductAttributePeer::doSelectCategoriesRangesByProduct($product);
if (!$ranges) {
return array();
}
$c = new Criteria();
foreach ($ranges as $range) {
$sql = sprintf('%s <= %s AND %s >= %s AND %s = %s', CategoryPeer::LFT, $range[0], CategoryPeer::RGT, $range[1], CategoryPeer::SCOPE, $range[2]);
$c->addOr(CategoryPeer::LFT, $sql, Criteria::CUSTOM);
}
$c->addJoin(appProductAttributePeer::ID, appProductAttributeHasCategoryPeer::ATTRIBUTE_ID);
$c->addJoin(appProductAttributeHasCategoryPeer::CATEGORY_ID, CategoryPeer::ID);
$c->addGroupByColumn(appProductAttributePeer::ID);
return appProductAttributePeer::doSelectArray($c, 'pl_PL');
}
}