aboutsummaryrefslogtreecommitdiff
path: root/bridges/BadDragonBridge.php
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/BadDragonBridge.php')
-rw-r--r--bridges/BadDragonBridge.php868
1 files changed, 438 insertions, 430 deletions
diff --git a/bridges/BadDragonBridge.php b/bridges/BadDragonBridge.php
index dd3de6b4..2260bbd6 100644
--- a/bridges/BadDragonBridge.php
+++ b/bridges/BadDragonBridge.php
@@ -1,432 +1,440 @@
<?php
-class BadDragonBridge extends BridgeAbstract {
- const NAME = 'Bad Dragon Bridge';
- const URI = 'https://bad-dragon.com/';
- const CACHE_TIMEOUT = 300; // 5min
- const DESCRIPTION = 'Returns sales or new clearance items';
- const MAINTAINER = 'Roliga';
- const PARAMETERS = array(
- 'Sales' => array(
- ),
- 'Clearance' => array(
- 'ready_made' => array(
- 'name' => 'Ready Made',
- 'type' => 'checkbox'
- ),
- 'flop' => array(
- 'name' => 'Flops',
- 'type' => 'checkbox'
- ),
- 'skus' => array(
- 'name' => 'Products',
- 'exampleValue' => 'chanceflared, crackers',
- 'title' => 'Comma separated list of product SKUs'
- ),
- 'onesize' => array(
- 'name' => 'One-Size',
- 'type' => 'checkbox'
- ),
- 'mini' => array(
- 'name' => 'Mini',
- 'type' => 'checkbox'
- ),
- 'small' => array(
- 'name' => 'Small',
- 'type' => 'checkbox'
- ),
- 'medium' => array(
- 'name' => 'Medium',
- 'type' => 'checkbox'
- ),
- 'large' => array(
- 'name' => 'Large',
- 'type' => 'checkbox'
- ),
- 'extralarge' => array(
- 'name' => 'Extra Large',
- 'type' => 'checkbox'
- ),
- 'category' => array(
- 'name' => 'Category',
- 'type' => 'list',
- 'values' => array(
- 'All' => 'all',
- 'Accessories' => 'accessories',
- 'Merchandise' => 'merchandise',
- 'Dildos' => 'insertable',
- 'Masturbators' => 'penetrable',
- 'Packers' => 'packer',
- 'Lil\' Squirts' => 'shooter',
- 'Lil\' Vibes' => 'vibrator',
- 'Wearables' => 'wearable'
- ),
- 'defaultValue' => 'all',
- ),
- 'soft' => array(
- 'name' => 'Soft Firmness',
- 'type' => 'checkbox'
- ),
- 'med_firm' => array(
- 'name' => 'Medium Firmness',
- 'type' => 'checkbox'
- ),
- 'firm' => array(
- 'name' => 'Firm',
- 'type' => 'checkbox'
- ),
- 'split' => array(
- 'name' => 'Split Firmness',
- 'type' => 'checkbox'
- ),
- 'maxprice' => array(
- 'name' => 'Max Price',
- 'type' => 'number',
- 'required' => true,
- 'defaultValue' => 300
- ),
- 'minprice' => array(
- 'name' => 'Min Price',
- 'type' => 'number',
- 'defaultValue' => 0
- ),
- 'cumtube' => array(
- 'name' => 'Cumtube',
- 'type' => 'checkbox'
- ),
- 'suctionCup' => array(
- 'name' => 'Suction Cup',
- 'type' => 'checkbox'
- ),
- 'noAccessories' => array(
- 'name' => 'No Accessories',
- 'type' => 'checkbox'
- )
- )
- );
-
- /*
- * This sets index $strFrom (or $strTo if set) in $outArr to 'on' if
- * $inArr[$param] contains $strFrom.
- * It is used for translating BD's shop filter URLs into something we can use.
- *
- * For the query '?type[]=ready_made&type[]=flop' we would have an array like:
- * Array (
- * [type] => Array (
- * [0] => ready_made
- * [1] => flop
- * )
- * )
- * which could be translated into:
- * Array (
- * [ready_made] => on
- * [flop] => on
- * )
- * */
- private function setParam($inArr, &$outArr, $param, $strFrom, $strTo = null) {
- if(isset($inArr[$param]) && in_array($strFrom, $inArr[$param])) {
- $outArr[($strTo ?: $strFrom)] = 'on';
- }
- }
-
- public function detectParameters($url) {
- $params = array();
-
- // Sale
- $regex = '/^(https?:\/\/)?bad-dragon\.com\/sales/';
- if(preg_match($regex, $url, $matches) > 0) {
- return $params;
- }
-
- // Clearance
- $regex = '/^(https?:\/\/)?bad-dragon\.com\/shop\/clearance/';
- if(preg_match($regex, $url, $matches) > 0) {
- parse_str(parse_url($url, PHP_URL_QUERY), $urlParams);
-
- $this->setParam($urlParams, $params, 'type', 'ready_made');
- $this->setParam($urlParams, $params, 'type', 'flop');
-
- if(isset($urlParams['skus'])) {
- $skus = array();
- foreach($urlParams['skus'] as $sku) {
- is_string($sku) && $skus[] = $sku;
- is_array($sku) && $skus[] = $sku[0];
- }
- $params['skus'] = implode(',', $skus);
- }
-
- $this->setParam($urlParams, $params, 'sizes', 'onesize');
- $this->setParam($urlParams, $params, 'sizes', 'mini');
- $this->setParam($urlParams, $params, 'sizes', 'small');
- $this->setParam($urlParams, $params, 'sizes', 'medium');
- $this->setParam($urlParams, $params, 'sizes', 'large');
- $this->setParam($urlParams, $params, 'sizes', 'extralarge');
-
- if(isset($urlParams['category'])) {
- $params['category'] = strtolower($urlParams['category']);
- } else{
- $params['category'] = 'all';
- }
-
- $this->setParam($urlParams, $params, 'firmnessValues', 'soft');
- $this->setParam($urlParams, $params, 'firmnessValues', 'medium', 'med_firm');
- $this->setParam($urlParams, $params, 'firmnessValues', 'firm');
- $this->setParam($urlParams, $params, 'firmnessValues', 'split');
-
- if(isset($urlParams['price'])) {
- isset($urlParams['price']['max'])
- && $params['maxprice'] = $urlParams['price']['max'];
- isset($urlParams['price']['min'])
- && $params['minprice'] = $urlParams['price']['min'];
- }
-
- isset($urlParams['cumtube'])
- && $urlParams['cumtube'] === '1'
- && $params['cumtube'] = 'on';
- isset($urlParams['suctionCup'])
- && $urlParams['suctionCup'] === '1'
- && $params['suctionCup'] = 'on';
- isset($urlParams['noAccessories'])
- && $urlParams['noAccessories'] === '1'
- && $params['noAccessories'] = 'on';
-
- return $params;
- }
-
- return null;
- }
-
- public function getName() {
- switch($this->queriedContext) {
- case 'Sales':
- return 'Bad Dragon Sales';
- case 'Clearance':
- return 'Bad Dragon Clearance Search';
- default:
- return parent::getName();
- }
- }
-
- public function getURI() {
- switch($this->queriedContext) {
- case 'Sales':
- return self::URI . 'sales';
- case 'Clearance':
- return $this->inputToURL();
- default:
- return parent::getURI();
- }
- }
-
- public function collectData() {
- switch($this->queriedContext) {
- case 'Sales':
- $sales = json_decode(getContents(self::URI . 'api/sales'));
-
- foreach($sales as $sale) {
- $item = array();
-
- $item['title'] = $sale->title;
- $item['timestamp'] = strtotime($sale->startDate);
-
- $item['uri'] = $this->getURI() . '/' . $sale->slug;
-
- $contentHTML = '<p><img src="' . $sale->image->url . '"></p>';
- if(isset($sale->endDate)) {
- $contentHTML .= '<p><b>This promotion ends on '
- . gmdate('M j, Y \a\t g:i A T', strtotime($sale->endDate))
- . '</b></p>';
- } else {
- $contentHTML .= '<p><b>This promotion never ends</b></p>';
- }
- $ul = false;
- $content = json_decode($sale->content);
- foreach($content->blocks as $block) {
- switch($block->type) {
- case 'header-one':
- $contentHTML .= '<h1>' . $block->text . '</h1>';
- break;
- case 'header-two':
- $contentHTML .= '<h2>' . $block->text . '</h2>';
- break;
- case 'header-three':
- $contentHTML .= '<h3>' . $block->text . '</h3>';
- break;
- case 'unordered-list-item':
- if(!$ul) {
- $contentHTML .= '<ul>';
- $ul = true;
- }
- $contentHTML .= '<li>' . $block->text . '</li>';
- break;
- default:
- if($ul) {
- $contentHTML .= '</ul>';
- $ul = false;
- }
- $contentHTML .= '<p>' . $block->text . '</p>';
- break;
- }
- }
- $item['content'] = $contentHTML;
-
- $this->items[] = $item;
- }
- break;
- case 'Clearance':
- $toyData = json_decode(getContents($this->inputToURL(true)));
-
- $productList = json_decode(getContents(self::URI
- . 'api/inventory-toy/product-list'));
-
- foreach($toyData->toys as $toy) {
- $item = array();
-
- $item['uri'] = $this->getURI()
- . '#'
- . $toy->id;
- $item['timestamp'] = strtotime($toy->created);
-
- foreach($productList as $product) {
- if($product->sku == $toy->sku) {
- $item['title'] = $product->name;
- break;
- }
- }
-
- // images
- $content = '<p>';
- foreach($toy->images as $image) {
- $content .= '<a href="'
- . $image->fullFilename
- . '"><img src="'
- . $image->thumbFilename
- . '" /></a>';
- }
- // price
- $content .= '</p><p><b>Price:</b> $'
- . $toy->price
- // size
- . '<br /><b>Size:</b> '
- . $toy->size
- // color
- . '<br /><b>Color:</b> '
- . $toy->color
- // features
- . '<br /><b>Features:</b> '
- . ($toy->suction_cup ? 'Suction cup' : '')
- . ($toy->suction_cup && $toy->cumtube ? ', ' : '')
- . ($toy->cumtube ? 'Cumtube' : '')
- . ($toy->suction_cup || $toy->cumtube ? '' : 'None');
- // firmness
- $firmnessTexts = array(
- '2' => 'Extra soft',
- '3' => 'Soft',
- '5' => 'Medium',
- '8' => 'Firm'
- );
- $firmnesses = explode('/', $toy->firmness);
- if(count($firmnesses) === 2) {
- $content .= '<br /><b>Firmness:</b> '
- . $firmnessTexts[$firmnesses[0]]
- . ', '
- . $firmnessTexts[$firmnesses[1]];
- } else{
- $content .= '<br /><b>Firmness:</b> '
- . $firmnessTexts[$firmnesses[0]];
- }
- // flop
- if($toy->type === 'flop') {
- $content .= '<br /><b>Flop reason:</b> '
- . $toy->flop_reason;
- }
- $content .= '</p>';
- $item['content'] = $content;
-
- $enclosures = array();
- foreach($toy->images as $image) {
- $enclosures[] = $image->fullFilename;
- }
- $item['enclosures'] = $enclosures;
-
- $categories = array();
- $categories[] = $toy->sku;
- $categories[] = $toy->type;
- $categories[] = $toy->size;
- if($toy->cumtube) {
- $categories[] = 'cumtube';
- }
- if($toy->suction_cup) {
- $categories[] = 'suction_cup';
- }
- $item['categories'] = $categories;
-
- $this->items[] = $item;
- }
- break;
- }
- }
-
- private function inputToURL($api = false) {
- $url = self::URI;
- $url .= ($api ? 'api/inventory-toys?' : 'shop/clearance?');
-
- // Default parameters
- $url .= 'limit=60';
- $url .= '&page=1';
- $url .= '&sort[field]=created';
- $url .= '&sort[direction]=desc';
-
- // Product types
- $url .= ($this->getInput('ready_made') ? '&type[]=ready_made' : '');
- $url .= ($this->getInput('flop') ? '&type[]=flop' : '');
-
- // Product names
- foreach(array_filter(explode(',', $this->getInput('skus'))) as $sku) {
- $url .= '&skus[]=' . urlencode(trim($sku));
- }
-
- // Size
- $url .= ($this->getInput('onesize') ? '&sizes[]=onesize' : '');
- $url .= ($this->getInput('mini') ? '&sizes[]=mini' : '');
- $url .= ($this->getInput('small') ? '&sizes[]=small' : '');
- $url .= ($this->getInput('medium') ? '&sizes[]=medium' : '');
- $url .= ($this->getInput('large') ? '&sizes[]=large' : '');
- $url .= ($this->getInput('extralarge') ? '&sizes[]=extralarge' : '');
-
- // Category
- $url .= ($this->getInput('category') ? '&category='
- . urlencode($this->getInput('category')) : '');
-
- // Firmness
- if($api) {
- $url .= ($this->getInput('soft') ? '&firmnessValues[]=3' : '');
- $url .= ($this->getInput('med_firm') ? '&firmnessValues[]=5' : '');
- $url .= ($this->getInput('firm') ? '&firmnessValues[]=8' : '');
- if($this->getInput('split')) {
- $url .= '&firmnessValues[]=3/5';
- $url .= '&firmnessValues[]=3/8';
- $url .= '&firmnessValues[]=8/3';
- $url .= '&firmnessValues[]=5/8';
- $url .= '&firmnessValues[]=8/5';
- }
- } else{
- $url .= ($this->getInput('soft') ? '&firmnessValues[]=soft' : '');
- $url .= ($this->getInput('med_firm') ? '&firmnessValues[]=medium' : '');
- $url .= ($this->getInput('firm') ? '&firmnessValues[]=firm' : '');
- $url .= ($this->getInput('split') ? '&firmnessValues[]=split' : '');
- }
-
- // Price
- $url .= ($this->getInput('maxprice') ? '&price[max]='
- . $this->getInput('maxprice') : '&price[max]=300');
- $url .= ($this->getInput('minprice') ? '&price[min]='
- . $this->getInput('minprice') : '&price[min]=0');
-
- // Features
- $url .= ($this->getInput('cumtube') ? '&cumtube=1' : '');
- $url .= ($this->getInput('suctionCup') ? '&suctionCup=1' : '');
- $url .= ($this->getInput('noAccessories') ? '&noAccessories=1' : '');
-
- return $url;
- }
+
+class BadDragonBridge extends BridgeAbstract
+{
+ const NAME = 'Bad Dragon Bridge';
+ const URI = 'https://bad-dragon.com/';
+ const CACHE_TIMEOUT = 300; // 5min
+ const DESCRIPTION = 'Returns sales or new clearance items';
+ const MAINTAINER = 'Roliga';
+ const PARAMETERS = [
+ 'Sales' => [
+ ],
+ 'Clearance' => [
+ 'ready_made' => [
+ 'name' => 'Ready Made',
+ 'type' => 'checkbox'
+ ],
+ 'flop' => [
+ 'name' => 'Flops',
+ 'type' => 'checkbox'
+ ],
+ 'skus' => [
+ 'name' => 'Products',
+ 'exampleValue' => 'chanceflared, crackers',
+ 'title' => 'Comma separated list of product SKUs'
+ ],
+ 'onesize' => [
+ 'name' => 'One-Size',
+ 'type' => 'checkbox'
+ ],
+ 'mini' => [
+ 'name' => 'Mini',
+ 'type' => 'checkbox'
+ ],
+ 'small' => [
+ 'name' => 'Small',
+ 'type' => 'checkbox'
+ ],
+ 'medium' => [
+ 'name' => 'Medium',
+ 'type' => 'checkbox'
+ ],
+ 'large' => [
+ 'name' => 'Large',
+ 'type' => 'checkbox'
+ ],
+ 'extralarge' => [
+ 'name' => 'Extra Large',
+ 'type' => 'checkbox'
+ ],
+ 'category' => [
+ 'name' => 'Category',
+ 'type' => 'list',
+ 'values' => [
+ 'All' => 'all',
+ 'Accessories' => 'accessories',
+ 'Merchandise' => 'merchandise',
+ 'Dildos' => 'insertable',
+ 'Masturbators' => 'penetrable',
+ 'Packers' => 'packer',
+ 'Lil\' Squirts' => 'shooter',
+ 'Lil\' Vibes' => 'vibrator',
+ 'Wearables' => 'wearable'
+ ],
+ 'defaultValue' => 'all',
+ ],
+ 'soft' => [
+ 'name' => 'Soft Firmness',
+ 'type' => 'checkbox'
+ ],
+ 'med_firm' => [
+ 'name' => 'Medium Firmness',
+ 'type' => 'checkbox'
+ ],
+ 'firm' => [
+ 'name' => 'Firm',
+ 'type' => 'checkbox'
+ ],
+ 'split' => [
+ 'name' => 'Split Firmness',
+ 'type' => 'checkbox'
+ ],
+ 'maxprice' => [
+ 'name' => 'Max Price',
+ 'type' => 'number',
+ 'required' => true,
+ 'defaultValue' => 300
+ ],
+ 'minprice' => [
+ 'name' => 'Min Price',
+ 'type' => 'number',
+ 'defaultValue' => 0
+ ],
+ 'cumtube' => [
+ 'name' => 'Cumtube',
+ 'type' => 'checkbox'
+ ],
+ 'suctionCup' => [
+ 'name' => 'Suction Cup',
+ 'type' => 'checkbox'
+ ],
+ 'noAccessories' => [
+ 'name' => 'No Accessories',
+ 'type' => 'checkbox'
+ ]
+ ]
+ ];
+
+ /*
+ * This sets index $strFrom (or $strTo if set) in $outArr to 'on' if
+ * $inArr[$param] contains $strFrom.
+ * It is used for translating BD's shop filter URLs into something we can use.
+ *
+ * For the query '?type[]=ready_made&type[]=flop' we would have an array like:
+ * Array (
+ * [type] => Array (
+ * [0] => ready_made
+ * [1] => flop
+ * )
+ * )
+ * which could be translated into:
+ * Array (
+ * [ready_made] => on
+ * [flop] => on
+ * )
+ * */
+ private function setParam($inArr, &$outArr, $param, $strFrom, $strTo = null)
+ {
+ if (isset($inArr[$param]) && in_array($strFrom, $inArr[$param])) {
+ $outArr[($strTo ?: $strFrom)] = 'on';
+ }
+ }
+
+ public function detectParameters($url)
+ {
+ $params = [];
+
+ // Sale
+ $regex = '/^(https?:\/\/)?bad-dragon\.com\/sales/';
+ if (preg_match($regex, $url, $matches) > 0) {
+ return $params;
+ }
+
+ // Clearance
+ $regex = '/^(https?:\/\/)?bad-dragon\.com\/shop\/clearance/';
+ if (preg_match($regex, $url, $matches) > 0) {
+ parse_str(parse_url($url, PHP_URL_QUERY), $urlParams);
+
+ $this->setParam($urlParams, $params, 'type', 'ready_made');
+ $this->setParam($urlParams, $params, 'type', 'flop');
+
+ if (isset($urlParams['skus'])) {
+ $skus = [];
+ foreach ($urlParams['skus'] as $sku) {
+ is_string($sku) && $skus[] = $sku;
+ is_array($sku) && $skus[] = $sku[0];
+ }
+ $params['skus'] = implode(',', $skus);
+ }
+
+ $this->setParam($urlParams, $params, 'sizes', 'onesize');
+ $this->setParam($urlParams, $params, 'sizes', 'mini');
+ $this->setParam($urlParams, $params, 'sizes', 'small');
+ $this->setParam($urlParams, $params, 'sizes', 'medium');
+ $this->setParam($urlParams, $params, 'sizes', 'large');
+ $this->setParam($urlParams, $params, 'sizes', 'extralarge');
+
+ if (isset($urlParams['category'])) {
+ $params['category'] = strtolower($urlParams['category']);
+ } else {
+ $params['category'] = 'all';
+ }
+
+ $this->setParam($urlParams, $params, 'firmnessValues', 'soft');
+ $this->setParam($urlParams, $params, 'firmnessValues', 'medium', 'med_firm');
+ $this->setParam($urlParams, $params, 'firmnessValues', 'firm');
+ $this->setParam($urlParams, $params, 'firmnessValues', 'split');
+
+ if (isset($urlParams['price'])) {
+ isset($urlParams['price']['max'])
+ && $params['maxprice'] = $urlParams['price']['max'];
+ isset($urlParams['price']['min'])
+ && $params['minprice'] = $urlParams['price']['min'];
+ }
+
+ isset($urlParams['cumtube'])
+ && $urlParams['cumtube'] === '1'
+ && $params['cumtube'] = 'on';
+ isset($urlParams['suctionCup'])
+ && $urlParams['suctionCup'] === '1'
+ && $params['suctionCup'] = 'on';
+ isset($urlParams['noAccessories'])
+ && $urlParams['noAccessories'] === '1'
+ && $params['noAccessories'] = 'on';
+
+ return $params;
+ }
+
+ return null;
+ }
+
+ public function getName()
+ {
+ switch ($this->queriedContext) {
+ case 'Sales':
+ return 'Bad Dragon Sales';
+ case 'Clearance':
+ return 'Bad Dragon Clearance Search';
+ default:
+ return parent::getName();
+ }
+ }
+
+ public function getURI()
+ {
+ switch ($this->queriedContext) {
+ case 'Sales':
+ return self::URI . 'sales';
+ case 'Clearance':
+ return $this->inputToURL();
+ default:
+ return parent::getURI();
+ }
+ }
+
+ public function collectData()
+ {
+ switch ($this->queriedContext) {
+ case 'Sales':
+ $sales = json_decode(getContents(self::URI . 'api/sales'));
+
+ foreach ($sales as $sale) {
+ $item = [];
+
+ $item['title'] = $sale->title;
+ $item['timestamp'] = strtotime($sale->startDate);
+
+ $item['uri'] = $this->getURI() . '/' . $sale->slug;
+
+ $contentHTML = '<p><img src="' . $sale->image->url . '"></p>';
+ if (isset($sale->endDate)) {
+ $contentHTML .= '<p><b>This promotion ends on '
+ . gmdate('M j, Y \a\t g:i A T', strtotime($sale->endDate))
+ . '</b></p>';
+ } else {
+ $contentHTML .= '<p><b>This promotion never ends</b></p>';
+ }
+ $ul = false;
+ $content = json_decode($sale->content);
+ foreach ($content->blocks as $block) {
+ switch ($block->type) {
+ case 'header-one':
+ $contentHTML .= '<h1>' . $block->text . '</h1>';
+ break;
+ case 'header-two':
+ $contentHTML .= '<h2>' . $block->text . '</h2>';
+ break;
+ case 'header-three':
+ $contentHTML .= '<h3>' . $block->text . '</h3>';
+ break;
+ case 'unordered-list-item':
+ if (!$ul) {
+ $contentHTML .= '<ul>';
+ $ul = true;
+ }
+ $contentHTML .= '<li>' . $block->text . '</li>';
+ break;
+ default:
+ if ($ul) {
+ $contentHTML .= '</ul>';
+ $ul = false;
+ }
+ $contentHTML .= '<p>' . $block->text . '</p>';
+ break;
+ }
+ }
+ $item['content'] = $contentHTML;
+
+ $this->items[] = $item;
+ }
+ break;
+ case 'Clearance':
+ $toyData = json_decode(getContents($this->inputToURL(true)));
+
+ $productList = json_decode(getContents(self::URI
+ . 'api/inventory-toy/product-list'));
+
+ foreach ($toyData->toys as $toy) {
+ $item = [];
+
+ $item['uri'] = $this->getURI()
+ . '#'
+ . $toy->id;
+ $item['timestamp'] = strtotime($toy->created);
+
+ foreach ($productList as $product) {
+ if ($product->sku == $toy->sku) {
+ $item['title'] = $product->name;
+ break;
+ }
+ }
+
+ // images
+ $content = '<p>';
+ foreach ($toy->images as $image) {
+ $content .= '<a href="'
+ . $image->fullFilename
+ . '"><img src="'
+ . $image->thumbFilename
+ . '" /></a>';
+ }
+ // price
+ $content .= '</p><p><b>Price:</b> $'
+ . $toy->price
+ // size
+ . '<br /><b>Size:</b> '
+ . $toy->size
+ // color
+ . '<br /><b>Color:</b> '
+ . $toy->color
+ // features
+ . '<br /><b>Features:</b> '
+ . ($toy->suction_cup ? 'Suction cup' : '')
+ . ($toy->suction_cup && $toy->cumtube ? ', ' : '')
+ . ($toy->cumtube ? 'Cumtube' : '')
+ . ($toy->suction_cup || $toy->cumtube ? '' : 'None');
+ // firmness
+ $firmnessTexts = [
+ '2' => 'Extra soft',
+ '3' => 'Soft',
+ '5' => 'Medium',
+ '8' => 'Firm'
+ ];
+ $firmnesses = explode('/', $toy->firmness);
+ if (count($firmnesses) === 2) {
+ $content .= '<br /><b>Firmness:</b> '
+ . $firmnessTexts[$firmnesses[0]]
+ . ', '
+ . $firmnessTexts[$firmnesses[1]];
+ } else {
+ $content .= '<br /><b>Firmness:</b> '
+ . $firmnessTexts[$firmnesses[0]];
+ }
+ // flop
+ if ($toy->type === 'flop') {
+ $content .= '<br /><b>Flop reason:</b> '
+ . $toy->flop_reason;
+ }
+ $content .= '</p>';
+ $item['content'] = $content;
+
+ $enclosures = [];
+ foreach ($toy->images as $image) {
+ $enclosures[] = $image->fullFilename;
+ }
+ $item['enclosures'] = $enclosures;
+
+ $categories = [];
+ $categories[] = $toy->sku;
+ $categories[] = $toy->type;
+ $categories[] = $toy->size;
+ if ($toy->cumtube) {
+ $categories[] = 'cumtube';
+ }
+ if ($toy->suction_cup) {
+ $categories[] = 'suction_cup';
+ }
+ $item['categories'] = $categories;
+
+ $this->items[] = $item;
+ }
+ break;
+ }
+ }
+
+ private function inputToURL($api = false)
+ {
+ $url = self::URI;
+ $url .= ($api ? 'api/inventory-toys?' : 'shop/clearance?');
+
+ // Default parameters
+ $url .= 'limit=60';
+ $url .= '&page=1';
+ $url .= '&sort[field]=created';
+ $url .= '&sort[direction]=desc';
+
+ // Product types
+ $url .= ($this->getInput('ready_made') ? '&type[]=ready_made' : '');
+ $url .= ($this->getInput('flop') ? '&type[]=flop' : '');
+
+ // Product names
+ foreach (array_filter(explode(',', $this->getInput('skus'))) as $sku) {
+ $url .= '&skus[]=' . urlencode(trim($sku));
+ }
+
+ // Size
+ $url .= ($this->getInput('onesize') ? '&sizes[]=onesize' : '');
+ $url .= ($this->getInput('mini') ? '&sizes[]=mini' : '');
+ $url .= ($this->getInput('small') ? '&sizes[]=small' : '');
+ $url .= ($this->getInput('medium') ? '&sizes[]=medium' : '');
+ $url .= ($this->getInput('large') ? '&sizes[]=large' : '');
+ $url .= ($this->getInput('extralarge') ? '&sizes[]=extralarge' : '');
+
+ // Category
+ $url .= ($this->getInput('category') ? '&category='
+ . urlencode($this->getInput('category')) : '');
+
+ // Firmness
+ if ($api) {
+ $url .= ($this->getInput('soft') ? '&firmnessValues[]=3' : '');
+ $url .= ($this->getInput('med_firm') ? '&firmnessValues[]=5' : '');
+ $url .= ($this->getInput('firm') ? '&firmnessValues[]=8' : '');
+ if ($this->getInput('split')) {
+ $url .= '&firmnessValues[]=3/5';
+ $url .= '&firmnessValues[]=3/8';
+ $url .= '&firmnessValues[]=8/3';
+ $url .= '&firmnessValues[]=5/8';
+ $url .= '&firmnessValues[]=8/5';
+ }
+ } else {
+ $url .= ($this->getInput('soft') ? '&firmnessValues[]=soft' : '');
+ $url .= ($this->getInput('med_firm') ? '&firmnessValues[]=medium' : '');
+ $url .= ($this->getInput('firm') ? '&firmnessValues[]=firm' : '');
+ $url .= ($this->getInput('split') ? '&firmnessValues[]=split' : '');
+ }
+
+ // Price
+ $url .= ($this->getInput('maxprice') ? '&price[max]='
+ . $this->getInput('maxprice') : '&price[max]=300');
+ $url .= ($this->getInput('minprice') ? '&price[min]='
+ . $this->getInput('minprice') : '&price[min]=0');
+
+ // Features
+ $url .= ($this->getInput('cumtube') ? '&cumtube=1' : '');
+ $url .= ($this->getInput('suctionCup') ? '&suctionCup=1' : '');
+ $url .= ($this->getInput('noAccessories') ? '&noAccessories=1' : '');
+
+ return $url;
+ }
}