get_id(); $source = (string) \DS82\ThreeDPrintShowcase\Core\Settings::get('appearance_source', 'builtin'); if (!in_array($source, ['builtin', 'combined'], true) || 'yes' !== \DS82\ThreeDPrintShowcase\Core\Settings::get('appearance_switching', 'yes')) { return; } $identifiers = ProductMeta::get($productId, 'available_materials', []); $identifiers = is_array($identifiers) ? array_values(array_filter(array_map('strval', $identifiers))) : []; if (!$identifiers || 'yes' !== Settings::get('appearance_switching', 'yes')) { return; } $items = []; foreach ($identifiers as $identifier) { $material = $this->materials->find($identifier); if ($material) { $items[$identifier] = $material; } } if (!$items) { return; } $default = (string) ProductMeta::get($productId, 'default_material', ''); if (!isset($items[$default])) { $default = (string) array_key_first($items); } $displayMode = (string) Settings::get('appearance_display', 'labels'); $remember = 'yes' === Settings::get('remember_appearance', 'no'); $tooltips = 'yes' === Settings::get('appearance_tooltips', 'yes'); ?> swatch_style($items[$default]->colors(), (string) $items[$default]->colorModeType); ?>
colors(); $style = $this->swatch_style($colors, (string) $material->colorModeType); ?> has_valid_nonce()) { wc_add_notice(__('The appearance selection could not be verified. Please try again.', '3d-print-showcase'), 'error'); return false; } $selectedInput = filter_input(INPUT_POST, 'ds82_3dps_material', FILTER_UNSAFE_RAW); $selected = sanitize_text_field(wp_unslash(is_string($selectedInput) ? $selectedInput : '')); if (!in_array($selected, $available, true) || !$this->materials->find($selected)) { wc_add_notice(__('Please choose an available appearance.', '3d-print-showcase'), 'error'); return false; } return $passed; } public function add_cart_item_data(array $cartItemData, int $productId, int $variationId): array { if (!$this->has_valid_nonce()) { return $cartItemData; } $selectedInput = filter_input(INPUT_POST, 'ds82_3dps_material', FILTER_UNSAFE_RAW); $selected = sanitize_text_field(wp_unslash(is_string($selectedInput) ? $selectedInput : '')); $material = $selected ? $this->materials->find($selected) : null; if (!$material) { return $cartItemData; } $cartItemData['ds82_3dps_material'] = [ 'identifier' => $selected, 'display_id' => $material->display_id(), 'label' => $material->label(), ]; return $cartItemData; } private function has_valid_nonce(): bool { $nonce = filter_input(INPUT_POST, '_ds82_3dps_appearance_nonce', FILTER_UNSAFE_RAW); return is_string($nonce) && wp_verify_nonce(sanitize_text_field(wp_unslash($nonce)), 'ds82_3dps_select_appearance'); } public function display_item_data(array $itemData, array $cartItem): array { $data = $cartItem['ds82_3dps_material'] ?? null; if (is_array($data) && !empty($data['label'])) { $itemData[] = ['key' => __('Appearance', '3d-print-showcase'), 'value' => sanitize_text_field((string) $data['label'])]; } return $itemData; } public function add_order_item_meta(\WC_Order_Item_Product $item, string $cartItemKey, array $values, \WC_Order $order): void { $data = $values['ds82_3dps_material'] ?? null; if (!is_array($data) || empty($data['label'])) { return; } $item->add_meta_data(__('Appearance', '3d-print-showcase'), sanitize_text_field((string) $data['label']), true); $item->add_meta_data('_ds82_3dps_material_id', sanitize_text_field((string) ($data['identifier'] ?? '')), true); } }