File: /var/www/shoetique/wp-content/plugins/wp-all-export-pro/src/App/Field/Gender.php
<?php
namespace Wpae\App\Field;
class Gender extends Field
{
    const SECTION = 'detailedInformation';
    public function getValue($snippetData)
    {
        $detailedInformationData = $this->feed->getSectionFeedData(self::SECTION);
        if ($detailedInformationData['gender'] == 'selectProductTaxonomies') {
            $categoryData = $this->feed->getSectionFeedData(self::SECTION);
            $categoryId = $this->getProductCategoryId($this->getProduct());
            
            if(isset($categoryData['genderCats'][$categoryId])) {
                return $categoryData['genderCats'][$categoryId];
            } else {
                return '';
            }
            
        } else if ($detailedInformationData['gender'] == self::SELECT_FROM_WOOCOMMERCE_PRODUCT_ATTRIBUTES) {
            if(isset($detailedInformationData['genderAttribute'])) {
                $genderAttribute = $detailedInformationData['genderAttribute'];
            } else {
                $genderAttribute = '';
            }
            return $genderAttribute;
        }
        else if ($detailedInformationData['gender'] == self::CUSTOM_VALUE_TEXT) {
            return $detailedInformationData['genderCV'];
        } else if ($detailedInformationData['gender'] == 'autodetectBasedOnProductTaxonomies') {
            $menValues = array('men', 'man', 'male', 'gentleman', 'gents');
            $womenValues = array('women', 'woman', 'female', 'ladies');
            $unisexValues = array('unisex');
            $product = $this->getProduct();
            $autodetect = '';
            $productCategories = get_the_terms($product->ID, 'product_cat');
            if (!is_array($productCategories) || !count($productCategories)) {
                return $autodetect;
            }
            foreach($productCategories as $attribute) {
                $attributeNameValue = $attribute->name;
                foreach($womenValues as $womenValue) {
                    if(strpos($attributeNameValue, $womenValue) !== false) {
                        // We do this so we don't match 'male next'
                        $attributeNameValue = str_replace($womenValue,'', $attributeNameValue);
                        $autodetect = 'female';
                    }
                }
                foreach($menValues as $menValue) {
                    if(strpos($attributeNameValue, $menValue) !== false) {
                        $autodetect = 'male';
                    }
                }
                foreach($unisexValues as $unisexValue) {
                    if(strpos($attributeNameValue, $unisexValue) !== false) {
                        $autodetect = 'unisex';
                    }
                }
            }
            if($autodetect === '') {
                if($detailedInformationData['genderAutodetect'] == 'setToUnisex') {
                    $autodetect = 'unisex';
                }
            }
            return $autodetect;
        }
        else {
            throw new \Exception('Unknown vale '.$detailedInformationData['gender'].' for field gender');
        }
    }
    public function getFieldName()
    {
        return 'gender';
    }
    private function getProductCategoryId($product)
    {
        $category = $this->getProductCategory($product);
        return $category->term_id;
    }
    private function getProductCategory($product)
    {
        $productCategories = get_the_terms($product->ID, 'product_cat');
        if (!is_array($productCategories) || !count($productCategories)) {
            return '';
        }
        // loop through each cat
        foreach ($productCategories as $category) {
            // get the children (if any) of the current cat
            $children = get_categories(array('taxonomy' => 'product_cat', 'parent' => $category->term_id));
            if (count($children) == 0) {
                // if no children, then echo the category name.
                return $category;
            }
        }
        $lastCategory = $productCategories[0];
        return $lastCategory;
    }
    /**
     * @return array|string|\WP_Post
     * @throws \Exception
     */
    private function getProduct()
    {
        if ($this->entry->post_type == 'product') {
            return $this->entry;
        } else if ($this->entry->post_type == 'product_variation') {
            return get_post($this->entry->post_parent);
        }
        throw new \Exception('Unknown product type');
    }
}