| | |
| | | |
| | | use JVBase\base\SchemaHelper; |
| | | use JVBase\inc\managers\SEO\render\Thing\Intangible\ItemList\OfferCatalog; |
| | | use JVBase\managers\SEO\render\Thing\Intangible\Offer; |
| | | use JVBase\managers\SEO\render\Thing\Intangible\Service; |
| | | use JVBase\managers\SEO\render\Thing\Intangible\StructuredValue\PriceSpecification; |
| | | use JVBase\managers\SEO\render\Thing\Product\Product; |
| | | use JVBase\meta\Meta; |
| | | use JVBase\registrar\Fields; |
| | | use JVBase\registrar\Registrar; |
| | | |
| | | if (!defined('ABSPATH')) { |
| | |
| | | ] |
| | | ]; |
| | | } |
| | | |
| | | public function setHasOfferCatalogField(Fields $fields):void |
| | | { |
| | | $fields->addField( |
| | | 'hasOfferCatalog', |
| | | [ |
| | | 'type' => 'repeater', |
| | | 'label' => 'Main Products & Services', |
| | | 'fields' => [ |
| | | 'type' => [ |
| | | 'type' => 'radio', |
| | | 'label' => __('Select Type', 'jvb'), |
| | | 'options' => [ |
| | | 'product' => 'Product', |
| | | 'service' => 'Service' |
| | | ], |
| | | 'required' => true, |
| | | ], |
| | | 'name' => [ |
| | | 'type' => 'text', |
| | | 'label' => __('Name of Product or Service', 'jvb'), |
| | | 'required' => true, |
| | | ], |
| | | 'description' => [ |
| | | 'type' => 'textarea', |
| | | 'label' => __('Description (optional)', 'jvb'), |
| | | ], |
| | | 'price' => [ |
| | | 'type' => 'text', |
| | | 'subtype' => 'number', |
| | | 'label' => __('Price', 'jvb'), |
| | | ], |
| | | 'unitText' => [ |
| | | 'type' => 'radio', |
| | | 'label' => 'Price per unit', |
| | | 'options' => [ |
| | | 'hour' => 'Hour', |
| | | 'unit' => 'Unit', |
| | | ], |
| | | 'default' => 'unit', |
| | | ] |
| | | ], |
| | | ] |
| | | ); |
| | | } |
| | | |
| | | public function formatHasOfferCatalogField(Meta $meta):void |
| | | { |
| | | $catalog = $meta->get('hasOfferCatalog'); |
| | | if (!empty($catalog)) { |
| | | $offerCatalog = []; |
| | | $name = ''; |
| | | $services = array_filter($catalog, function ($item) { |
| | | return $item['type'] === 'service'; |
| | | }); |
| | | $products =array_filter($catalog, function ($item) { |
| | | return $item['type'] === 'product'; |
| | | }); |
| | | if (count($products) > 0) { |
| | | $name = 'Products'; |
| | | if (count($services) > 0) { |
| | | $name .= ' & '; |
| | | } |
| | | } |
| | | if (count($services) > 0) { |
| | | $name .= 'Services'; |
| | | } |
| | | foreach ($catalog as $row) { |
| | | $offer = new Offer(); |
| | | |
| | | $item = match($row['type']) { |
| | | 'product' => new Product(), |
| | | 'service' => new Service(), |
| | | }; |
| | | |
| | | $item->setName($row['name']); |
| | | if (!empty($row['description'])) { |
| | | $item->setDescription($row['description']); |
| | | } |
| | | if (!empty($row['price'])) { |
| | | $price = new PriceSpecification(); |
| | | $price->setPrice($row['price']); |
| | | $price->setPriceCurrency('CAD'); |
| | | $price->setUnitText($row['unitText']); |
| | | $offer->setPriceSpecification($price); |
| | | } |
| | | $offer->setItemOffered($item); |
| | | $offerCatalog[] = $offer; |
| | | } |
| | | if (!empty(!$offerCatalog)) { |
| | | $final = new OfferCatalog(); |
| | | $final->setName($name); |
| | | $final->setItemListElement($offerCatalog); |
| | | $this->sethasOfferCatalog($final); |
| | | } |
| | | } |
| | | } |
| | | } |