Files
pomysloweprezenty.pl/autoload/admin/factory/class.ShopAttribute.php
2024-10-23 12:55:46 +02:00

264 lines
8.4 KiB
PHP

<?php
namespace admin\factory;
class ShopAttribute
{
static public function get_attributes_list()
{
global $mdb;
$rows = $mdb -> select( 'pp_shop_attributes', '*', [ 'ORDER' => [ 'o' => 'ASC' ] ] );
if ( \S::is_array_fix( $rows ) ) foreach ( $rows as $row )
{
$attribute = \admin\factory\ShopAttribute::attribute_details( $row['id'] );
$attribute['values'] = \admin\factory\ShopAttribute::get_attribute_values( $row['id'] );
$attributes[] = $attribute;
}
return $attributes;
}
// pobierz nazwę wartości atrybutu
static public function get_attribute_value_by_id( int $value_id )
{
global $mdb;
return $mdb -> get( 'pp_shop_attributes_values_langs', 'name', [ 'AND' => [ 'value_id' => $value_id, 'lang_id' => \front\factory\Languages::default_language() ] ] );
}
//pobierz nazwę atrybutu
static public function get_attribute_name_by_id( int $attribute_id )
{
global $mdb;
return $mdb -> get( 'pp_shop_attributes_langs', 'name', [ 'AND' => [ 'attribute_id' => $attribute_id, 'lang_id' => \front\factory\Languages::default_language() ] ] );
}
static public function values_save( int $attribute_id, $names, $values, $ids, $default_value = '', $impact_on_the_price )
{
global $mdb;
$main_language = \front\factory\Languages::default_language();
if ( \S::is_array_fix( $ids[$main_language] ) )
$ids_delete = implode( ',', $ids[$main_language] );
else
{
if ( $ids[$main_language] )
$ids_delete = $ids[$main_language];
}
if ( $ids_delete )
$mdb -> query( 'DELETE FROM pp_shop_attributes_values WHERE id NOT IN (' . $ids_delete . ') AND attribute_id = ' . $attribute_id );
for ( $i = 0; $i < count( $names[$main_language] ); ++$i )
{
if ( $ids[$main_language][$i] )
{
$mdb -> update( 'pp_shop_attributes_values', [
'impact_on_the_price' => $impact_on_the_price[$i] ? \S::normalize_decimal( $impact_on_the_price[$i] ) : null,
], [
'id' => $ids[$main_language][$i],
] );
\admin\factory\ShopProduct::update_product_price_by_attribute_value_impact( $ids[$main_language][$i], $impact_on_the_price[$i] );
$langs = \admin\factory\Languages::languages_list();
foreach ( $langs as $lang )
{
if ( $names[$lang['id']][$i] and $mdb -> count( 'pp_shop_attributes_values_langs', [ 'AND' => [ 'value_id' => $ids[$main_language][$i], 'lang_id' => $lang['id'] ] ] ) )
{
$mdb -> update( 'pp_shop_attributes_values_langs', [
'name' => $names[$lang['id']][$i],
'value' => $values[$lang['id']][$i] ? $values[$lang['id']][$i] : null,
], [
'AND' => [
'value_id' => $ids[$main_language][$i],
'lang_id' => $lang['id'],
],
] );
}
elseif ( $names[$lang['id']][$i] and !$mdb -> count( 'pp_shop_attributes_values_langs', [ 'AND' => [ 'value_id' => $ids[$main_language][$i], 'lang_id' => $lang['id'] ] ] ) )
{
$mdb -> insert('pp_shop_attributes_values_langs', [
'value_id' => $ids[$main_language][$i],
'lang_id' => $lang['id'],
'name' => $names[$lang['id']][$i],
'value' => $values[$lang['id']][$i] ? $values[$lang['id']][$i] : null,
] );
}
}
if ( $default_value == $i )
$default_value_id = $ids[$main_language][$i];
}
else
{
$mdb -> insert( 'pp_shop_attributes_values', [ 'attribute_id' => $attribute_id ] );
$value_id = $mdb -> id();
if ( $value_id )
{
$mdb -> update( 'pp_shop_attributes_values', [
'impact_on_the_price' => $impact_on_the_price[$i] ? \S::normalize_decimal( $impact_on_the_price[$i] ) : null,
], [
'id' => $value_id,
] );
if ( $impact_on_the_price[$i] )
\admin\factory\ShopProduct::update_product_price_by_attribute_value_impact( $value_id, \S::normalize_decimal( $impact_on_the_price[$i] ) );
$langs = \admin\factory\Languages::languages_list();
if ( \S::is_array_fix( $langs ) ) foreach ( $langs as $lang )
{
if ( $names[$lang['id']][$i] )
{
$mdb -> insert('pp_shop_attributes_values_langs', [
'value_id' => $value_id,
'lang_id' => $lang['id'],
'name' => $names[$lang['id']][$i],
'value' => $values[$lang['id']][$i] ? $values[$lang['id']][$i] : null,
] );
}
}
if ( $default_value == $i )
$default_value_id = $value_id;
}
}
}
if ( $default_value_id )
{
$mdb -> update( 'pp_shop_attributes_values', [ 'is_default' => 0 ], [ 'attribute_id' => $attribute_id ] );
$mdb -> update( 'pp_shop_attributes_values', [ 'is_default' => 1 ], [ 'id' => $default_value_id ] );
}
\S::delete_cache();
return $attribute_id;
}
static public function get_attribute_values( int $attribute_id )
{
global $mdb;
$results = $mdb -> select( 'pp_shop_attributes_values', [ 'id', 'is_default', 'impact_on_the_price' ], [ 'attribute_id' => $attribute_id ] );
if ( \S::is_array_fix( $results ) ) foreach ( $results as $row )
{
$results2 = $mdb -> select( 'pp_shop_attributes_values_langs', [ 'lang_id', 'name', 'value' ], [ 'value_id' => $row['id'] ] );
if ( \S::is_array_fix( $results2 ) ) foreach ( $results2 as $row2 )
$row['languages'][$row2['lang_id']] = $row2;
$values[] = $row;
}
return $values;
}
static public function delete_attribute( int $attribute_id )
{
global $mdb, $user;
if ( $mdb -> delete( 'pp_shop_attributes', [ 'id' => $attribute_id ] ) )
{
\Log::save_log( 'Atrybut został usunięty | ID: ' . $attribute_id, $user['id'] );
return true;
}
return false;
}
static public function attribute_save( int $attribute_id, $name, int $status, int $type, int $o )
{
global $mdb, $user;
if ( !$attribute_id )
{
$mdb -> insert( 'pp_shop_attributes', [
'status' => $status,
'type' => $type,
'o' => $o
] );
$id = $mdb -> id();
if ( !$id )
return false;
\Log::save_log( 'Dodano nowy atrybut | ID: ' . $id, $user['id'] );
foreach ( $name as $key => $val )
{
$mdb -> insert( 'pp_shop_attributes_langs', [
'attribute_id' => (int)$id,
'lang_id' => $key,
'name' => $name[$key],
] );
}
\S::delete_dir( '../temp/' );
return $id;
}
else
{
$mdb -> update( 'pp_shop_attributes', [
'status' => $status,
'type' => $type,
'o' => $o
], [
'id' => $attribute_id,
] );
\Log::save_log( 'Zaktualizowano atrybut | ID: ' . $attribute_id, $user['id'] );
foreach ( $name as $key => $val )
{
if ( $translation_id = $mdb -> get( 'pp_shop_attributes_langs', 'id', [ 'AND' => [ 'attribute_id' => $attribute_id, 'lang_id' => $key ] ] ) )
$mdb -> update( 'pp_shop_attributes_langs', [
'lang_id' => $key,
'name' => $name[$key],
], [
'id' => $translation_id
] );
else
$mdb -> insert( 'pp_shop_attributes_langs', [
'attribute_id' => (int)$attribute_id,
'lang_id' => $key,
'name' => $name[$key],
] );
}
\S::delete_dir( '../temp/' );
return $attribute_id;
}
}
static public function value_details( int $value_id )
{
global $mdb;
$value = $mdb -> get( 'pp_shop_attributes_values', '*', [ 'id' => (int) $value_id ] );
$results = $mdb -> select( 'pp_shop_attributes_values_langs', [ 'lang_id', 'name', 'value' ], [ 'value_id' => (int) $value_id ] );
if ( \S::is_array_fix( $results ) ) foreach ( $results as $row)
$value['languages'][$row['lang_id']] = $row;
return $value;
}
static public function attribute_details( int $attribute_id )
{
global $mdb;
$attribute = $mdb -> get( 'pp_shop_attributes', '*', [ 'id' => (int) $attribute_id ] );
$results = $mdb -> select( 'pp_shop_attributes_langs', [ 'lang_id', 'name' ], [ 'attribute_id' => (int) $attribute_id ] );
if ( \S::is_array_fix( $results ) ) foreach ( $results as $row)
$attribute['languages'][$row['lang_id']] = $row;
return $attribute;
}
}