| @@ -62,8 +62,10 @@ | ||
| 62 | 62 | $this->post( 'items/favourite', [ $this, 'set_favourite' ] ); |
| 63 | 63 | $this->post( 'items/rating', [ $this, 'set_rating' ] ); |
| 64 | 64 | $this->get( 'items-count', [ $this, 'get_counts' ] ); |
| 65 | 65 | $this->get( 'featured-items', [ $this, 'featured_items' ] ); |
| 66 | + $this->get( 'trending-items', [ $this, 'trending_items' ] ); | |
| 67 | + $this->get( 'related-items', [ $this, 'related_items' ]); | |
| 66 | 68 | } |
| 67 | 69 | |
| 68 | 70 | /** |
| 69 | 71 | * @param string $type |
| @@ -155,17 +157,24 @@ | ||
| 155 | 157 | if( $type === false ) { |
| 156 | 158 | return $this->error( 'invalid_type_call', __( 'Invalid Type Call', 'templately' ) ); |
| 157 | 159 | } |
| 158 | 160 | |
| 159 | - $items_params = 'id, name, rating, type, description, slug, price, features, favourite_count, thumbnail, downloads, categories{ id, name, slug }, dependencies{ id, name, icon, plugin_file, plugin_original_slug, is_pro, link }, tags{ name, id }, categories{ name, id }, screenshots{ url }, banner, pack{ id, name, slug, items{ id, price, name, type, slug, thumbnail } }, live_url, template_type{ id, name, slug }'; | |
| 161 | + $items_params = 'id, name, rating, type, description, slug, price, features, favourite_count, is_favourite, is_reviewed, thumbnail, downloads, categories{ id, name, slug }, dependencies{ id, name, icon, plugin_file, plugin_original_slug, is_pro, link }, tags{ name, id }, categories{ name, id }, screenshots{ url }, banner, published_at, updated_at, is_trending, badges, pack{ id, name, slug, items{ id, price, name, type, slug, thumbnail } }, live_url, template_type{ id, name, slug }'; | |
| 160 | 162 | $params = 'data { ' . $items_params . ', variations { name, slug, type, platform } }'; |
| 161 | 163 | |
| 162 | 164 | if ( $type == 'packs' ) { |
| 163 | - $params = 'data { id, fullsite_import, name, rating, type, slug, live_url, price, features, favourite_count, thumbnail, downloads, categories{ id, name, slug }, items { ' . $items_params . ' }, variations { name, slug, type, platform } }'; | |
| 165 | + $params = 'data { id, fullsite_import, ai_compatible, has_settings, has_attachments, name, rating, type, slug, live_url, price, features, favourite_count, is_favourite, is_reviewed, thumbnail, description, tags{ name, id }, banner, published_at, updated_at, is_trending, badges, template_type{ id, name, slug } downloads, categories{ id, name, slug }, items { ' . $items_params . ' }, variations { name, slug, type, platform } }'; | |
| 164 | 166 | } |
| 165 | 167 | |
| 166 | - $response = $this->http()->query( $type, $params, [ 'slug' => $slug ] )->post(); | |
| 168 | + $args = [ | |
| 169 | + 'slug' => $slug, | |
| 170 | + ]; | |
| 171 | + if (!empty($this->api_key)) { | |
| 172 | + $args['api_key'] = $this->api_key; | |
| 173 | + } | |
| 167 | 174 | |
| 175 | + $response = $this->http()->query( $type, $params, $args )->post(); | |
| 176 | + | |
| 168 | 177 | if ( is_wp_error( $response ) ) { |
| 169 | 178 | return $response; |
| 170 | 179 | } |
| 171 | 180 | |
| @@ -274,9 +283,9 @@ | ||
| 274 | 283 | 'id' => $id, |
| 275 | 284 | 'type' => $type == 'block' || $type == 'page' ? 'item' : 'pack' |
| 276 | 285 | ]; |
| 277 | 286 | |
| 278 | - if( $response == 1 ) { | |
| 287 | + if( $response == 1 || $response === false ) { | |
| 279 | 288 | $_favourites = $this->utils('options')->get('favourites'); |
| 280 | 289 | $_favourites = $this->utils('helper')->normalizeFavourites( $_temp_data, $_favourites, true ); |
| 281 | 290 | $this->utils('options')->set('favourites', $_favourites); |
| 282 | 291 | |
| @@ -435,14 +444,14 @@ | ||
| 435 | 444 | * @param WP_REST_Request $request |
| 436 | 445 | * @return mixed |
| 437 | 446 | */ |
| 438 | 447 | public function featured_items(WP_REST_Request $request){ |
| 439 | - $defaults = Database::get_transient( 'featuredItems' ); | |
| 448 | + $platform = $request->get_param( 'platform' ); | |
| 449 | + $defaults = Database::get_transient( "featuredItems_{$platform}" ); | |
| 440 | 450 | if( $defaults ) { |
| 441 | 451 | return $defaults; |
| 442 | 452 | } |
| 443 | 453 | |
| 444 | - $platform = $request->get_param( 'platform' ); | |
| 445 | 454 | $funcArgs = [ |
| 446 | 455 | // 'page' => 1, |
| 447 | 456 | // 'per_page' => 10, |
| 448 | 457 | 'platform' => $platform, |
| @@ -457,6 +466,85 @@ | ||
| 457 | 466 | Database::set_transient( 'featuredItems', $response ); |
| 458 | 467 | } |
| 459 | 468 | |
| 460 | 469 | return $response; |
| 470 | + } | |
| 471 | + | |
| 472 | + /** | |
| 473 | + * Get Trending Item List | |
| 474 | + * @param WP_REST_Request $request | |
| 475 | + * @return mixed | |
| 476 | + */ | |
| 477 | + public function trending_items(WP_REST_Request $request){ | |
| 478 | + $platform = $request->get_param( 'platform' ); | |
| 479 | + $defaults = Database::get_transient( "trendingItems_{$platform}" ); | |
| 480 | + if( $defaults ) { | |
| 481 | + return $defaults; | |
| 482 | + } | |
| 483 | + | |
| 484 | + $funcArgs = [ | |
| 485 | + // 'page' => 1, | |
| 486 | + // 'per_page' => 10, | |
| 487 | + 'platform' => $platform, | |
| 488 | + ]; | |
| 489 | + $response = $this->http()->query( | |
| 490 | + 'trendingItems', | |
| 491 | + 'data{ id, name, slug, price, type, thumbnail }', | |
| 492 | + $funcArgs | |
| 493 | + )->post(); | |
| 494 | + | |
| 495 | + if( ! is_wp_error( $response ) ) { | |
| 496 | + Database::set_transient( 'trendingItems', $response ); | |
| 497 | + } | |
| 498 | + | |
| 499 | + return $response; | |
| 500 | + } | |
| 501 | + | |
| 502 | + /** | |
| 503 | + * Get Related Item List | |
| 504 | + * @param WP_REST_Request $request | |
| 505 | + * @return mixed | |
| 506 | + */ | |
| 507 | + public function related_items(WP_REST_Request $request){ | |
| 508 | + $item_id = (int) $request->get_param( 'item_id' ); | |
| 509 | + $type = $request->get_param( '_type' ); | |
| 510 | + | |
| 511 | + if ( empty( $item_id ) ) { | |
| 512 | + return $this->error( | |
| 513 | + 'invalid_item_id', | |
| 514 | + __( 'Item ID cannot be empty.', 'templately' ), | |
| 515 | + 'related-items', | |
| 516 | + '400' | |
| 517 | + ); | |
| 518 | + } | |
| 519 | + | |
| 520 | + if ( empty( $type ) ) { | |
| 521 | + return $this->error( | |
| 522 | + 'invalid_type', | |
| 523 | + __( 'Type cannot be empty.', 'templately' ), | |
| 524 | + 'related-items', | |
| 525 | + '400' | |
| 526 | + ); | |
| 527 | + } | |
| 528 | + | |
| 529 | + $funcArgs = [ | |
| 530 | + 'id' => $item_id, | |
| 531 | + 'type' => $type, | |
| 532 | + 'limit' => 3, // Limit to 3 related items | |
| 533 | + ]; | |
| 534 | + | |
| 535 | + $response = $this->http()->query( | |
| 536 | + 'relatedItems', | |
| 537 | + 'id, name, slug, price, type, thumbnail', | |
| 538 | + $funcArgs | |
| 539 | + )->post(); | |
| 540 | + | |
| 541 | + if( is_wp_error( $response ) ) { | |
| 542 | + return $response; | |
| 543 | + } | |
| 544 | + | |
| 545 | + return [ | |
| 546 | + 'status' => 'success', | |
| 547 | + 'data' => $response, | |
| 548 | + ]; | |
| 461 | 549 | } |
| 462 | 550 | } |