PluginProbe ʕ •ᴥ•ʔ
Kubio AI Page Builder / trunk
Kubio AI Page Builder vtrunk
2.8.1 trunk 1.0.0 1.0.1 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.7.3 1.8.0 1.8.1 1.8.2 1.9.0 2.0.0 2.1.1 2.1.2 2.1.3 2.2.0 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.5 2.5.0 2.5.1 2.5.2 2.5.3 2.6.0 2.6.1 2.6.2 2.6.3 2.6.5 2.6.6 2.6.7 2.7.0 2.7.1 2.7.2 2.7.3 2.8.0
kubio / lib / AI / api.php
kubio / lib / AI Last commit date
Blog 9 months ago SDApi 1 year ago Shop 9 months ago admin-tab 1 year ago filters 1 year ago PostImage.php 1 year ago api.php 9 months ago index.php 1 year ago utils.php 1 year ago
api.php
1113 lines
1 <?php
2
3 use IlluminateAgnostic\Arr\Support\Arr;
4 use Kubio\Core\Importer;
5 use Kubio\Flags;
6 use Kubio\Ai\ShopContent;
7 use Kubio\Ai\BlogContent;
8 use Kubio\Core\Utils;
9
10 add_action(
11 'rest_api_init',
12 function () {
13 $namespace = 'kubio/v1';
14
15 register_rest_route(
16 $namespace,
17 '/ai/info',
18 array(
19 'methods' => 'POST',
20 'callback' => 'kubio_ai_get_service_info',
21 'permission_callback' => function () {
22 return current_user_can( 'edit_theme_options' );
23 },
24 )
25 );
26
27 register_rest_route(
28 $namespace,
29 '/ai/usage',
30 array(
31 'methods' => 'POST',
32 'callback' => 'kubio_ai_get_service_usage',
33 'permission_callback' => function () {
34 return current_user_can( 'edit_theme_options' );
35 },
36 )
37 );
38
39 register_rest_route(
40 $namespace,
41 '/ai/set-ai-key',
42 array(
43 'methods' => 'POST',
44 'callback' => 'kubio_ai_store_ai_key',
45 'permission_callback' => function () {
46 return current_user_can( 'edit_theme_options' );
47 },
48 )
49 );
50
51 register_rest_route(
52 $namespace,
53 '/ai/settings',
54 array(
55 'methods' => 'GET',
56 'callback' => 'kubio_ai_get_general_settings',
57 'permission_callback' => function () {
58 return current_user_can( 'edit_theme_options' );
59 },
60 )
61 );
62
63 register_rest_route(
64 $namespace,
65 '/ai/settings',
66 array(
67 'methods' => 'POST',
68 'callback' => 'kubio_ai_store_general_settings',
69 'permission_callback' => function () {
70 return current_user_can( 'edit_theme_options' );
71 },
72 )
73 );
74
75 register_rest_route(
76 $namespace,
77 '/ai/generate-site-structure',
78 array(
79 'methods' => 'POST',
80 'callback' => 'kubio_ai_get_site_structure',
81 'permission_callback' => function () {
82 return current_user_can( 'edit_theme_options' );
83 },
84 )
85 );
86
87 register_rest_route(
88 $namespace,
89 '/ai/determine-site-mood',
90 array(
91 'methods' => 'POST',
92 'callback' => 'kubio_ai_get_site_mood',
93 'permission_callback' => function () {
94 return current_user_can( 'edit_theme_options' );
95 },
96 )
97 );
98
99 register_rest_route(
100 $namespace,
101 '/ai/generate-color-scheme',
102 array(
103 'methods' => 'POST',
104 'callback' => 'kubio_ai_get_color_scheme',
105 'permission_callback' => function () {
106 return current_user_can( 'edit_theme_options' );
107 },
108 )
109 );
110
111 register_rest_route(
112 $namespace,
113 '/ai/generate-page-structure',
114 array(
115 'methods' => 'POST',
116 'callback' => 'kubio_ai_get_page_structure',
117 'permission_callback' => function () {
118 return current_user_can( 'edit_theme_options' );
119 },
120 )
121 );
122 register_rest_route(
123 $namespace,
124 '/ai/get-default-homepage-sections-summaries-by-anchor',
125 array(
126 'methods' => 'POST',
127 'callback' => 'kubio_ai_get_default_homepage_sections_summaries_by_anchor',
128 'permission_callback' => function () {
129 return current_user_can( 'edit_theme_options' );
130 },
131 )
132 );
133
134 register_rest_route(
135 $namespace,
136 '/ai/get-generated-data-stored-in-the-database',
137 array(
138 'methods' => 'POST',
139 'callback' => 'kubio_ai_get_generated_data_stored_in_the_database',
140 'permission_callback' => function () {
141 return current_user_can( 'edit_theme_options' );
142 },
143 )
144 );
145 register_rest_route(
146 $namespace,
147 '/ai/update-default-homepage-sections-used-images',
148 array(
149 'methods' => 'POST',
150 'callback' => 'kubio_ai_update_default_homepage_sections_used_images',
151 'permission_callback' => function () {
152 return current_user_can( 'edit_theme_options' );
153 },
154 )
155 );
156 register_rest_route(
157 $namespace,
158 '/ai/get-default-homepage-sections-used-images',
159 array(
160 'methods' => 'POST',
161 'callback' => 'kubio_ai_get_default_homepage_sections_used_images',
162 'permission_callback' => function () {
163 return current_user_can( 'edit_theme_options' );
164 },
165 )
166 );
167 register_rest_route(
168 $namespace,
169 '/ai/generate-section-content',
170 array(
171 'methods' => 'POST',
172 'callback' => 'kubio_ai_get_page_section_content',
173 'permission_callback' => function () {
174 return current_user_can( 'edit_theme_options' );
175 },
176 )
177 );
178
179 register_rest_route(
180 $namespace,
181 '/ai/rephrase-section-content',
182 array(
183 'methods' => 'POST',
184 'callback' => 'kubio_ai_get_rephrase_section_content',
185 'permission_callback' => function () {
186 return current_user_can( 'edit_theme_options' );
187 },
188 )
189 );
190
191 register_rest_route(
192 $namespace,
193 '/ai/search-image',
194 array(
195 'methods' => 'POST',
196 'callback' => 'kubio_ai_search_image',
197 'permission_callback' => function () {
198 return current_user_can( 'edit_theme_options' );
199 },
200 )
201 );
202
203 register_rest_route(
204 $namespace,
205 '/ai/search-video',
206 array(
207 'methods' => 'POST',
208 'callback' => 'kubio_ai_search_video',
209 'permission_callback' => function () {
210 return current_user_can( 'edit_theme_options' );
211 },
212 )
213 );
214
215 register_rest_route(
216 $namespace,
217 '/ai/prompt-to-image',
218 array(
219 'methods' => 'POST',
220 'callback' => 'kubio_ai_prompt_search_image',
221 'permission_callback' => function () {
222 return current_user_can( 'edit_theme_options' );
223 },
224 )
225 );
226
227 register_rest_route(
228 $namespace,
229 '/ai/prompt-to-video',
230 array(
231 'methods' => 'POST',
232 'callback' => 'kubio_ai_prompt_search_video',
233 'permission_callback' => function () {
234 return current_user_can( 'edit_theme_options' );
235 },
236 )
237 );
238
239 register_rest_route(
240 $namespace,
241 '/ai/process-text',
242 array(
243 'methods' => 'POST',
244 'callback' => 'kubio_ai_get_processed_text',
245 'permission_callback' => function () {
246 return current_user_can( 'edit_theme_options' );
247 },
248 )
249 );
250
251 register_rest_route(
252 $namespace,
253 '/ai/summarize-prompt',
254 array(
255 'methods' => 'POST',
256 'callback' => 'kubio_ai_get_summarized_prompt',
257 'permission_callback' => function () {
258 return current_user_can( 'edit_theme_options' );
259 },
260 )
261 );
262
263 register_rest_route(
264 $namespace,
265 '/ai/prompt',
266 array(
267 'methods' => 'POST',
268 'callback' => 'kubio_ai_get_prompt',
269 'permission_callback' => function () {
270 return current_user_can( 'edit_theme_options' );
271 },
272 )
273 );
274
275 register_rest_route(
276 $namespace,
277 '/ai/change-text',
278 array(
279 'methods' => 'POST',
280 'callback' => 'kubio_ai_change_text',
281 'permission_callback' => function () {
282 return current_user_can( 'edit_theme_options' );
283 },
284 )
285 );
286
287 register_rest_route(
288 $namespace,
289 '/commercial-flow',
290 array(
291 'methods' => 'GET',
292 'callback' => 'kubio_get_commercial_flow_settings',
293 'permission_callback' => function () {
294 return current_user_can( 'edit_theme_options' );
295 },
296 )
297 );
298
299
300
301 register_rest_route(
302 $namespace,
303 '/commercial-flow',
304 array(
305 'methods' => 'POST',
306 'callback' => 'kubio_store_commercial_flow_settings',
307 'permission_callback' => function () {
308 return current_user_can( 'edit_theme_options' );
309 },
310 )
311 );
312
313
314 register_rest_route(
315 $namespace,
316 '/ai/generate-blog-structure',
317 array(
318 'methods' => 'POST',
319 'callback' => 'kubio_ai_get_blog_structure',
320 'permission_callback' => function () {
321 return current_user_can( 'edit_theme_options' );
322 },
323 )
324 );
325 register_rest_route(
326 $namespace,
327 '/ai/generate-blog-structure-and-articles',
328 array(
329 'methods' => 'POST',
330 'callback' => 'kubio_ai_get_blog_structure_and_articles',
331 'permission_callback' => function () {
332 return current_user_can( 'edit_theme_options' );
333 },
334 )
335 );
336 register_rest_route(
337 $namespace,
338 '/ai/get-category-articles',
339 array(
340 'methods' => 'POST',
341 'callback' => 'kubio_ai_get_category_articles',
342 'permission_callback' => function () {
343 return current_user_can( 'edit_theme_options' );
344 },
345 )
346 );
347
348 register_rest_route(
349 $namespace,
350 '/ai/save-articles-for-category',
351 array(
352 'methods' => 'POST',
353 'callback' => 'kubio_ai_save_articles_by_category',
354 'permission_callback' => function () {
355 return current_user_can( 'edit_theme_options' );
356 },
357 )
358 );
359
360 register_rest_route(
361 $namespace,
362 '/ai/translate-site-structure',
363 array(
364 'methods' => 'POST',
365 'callback' => 'kubio_ai_get_translate_site_structure',
366 'permission_callback' => function () {
367 return current_user_can( 'edit_theme_options' );
368 },
369 )
370 );
371
372 // shop generation
373 register_rest_route(
374 $namespace,
375 '/ai/generate-shop-structure',
376 array(
377 'methods' => 'POST',
378 'callback' => 'kubio_ai_get_shop_structure',
379 'permission_callback' => function () {
380 return current_user_can( 'edit_theme_options' );
381 },
382 )
383 );
384
385 register_rest_route(
386 $namespace,
387 '/ai/check-shop-categories-exist',
388 array(
389 'methods' => 'POST',
390 'callback' => 'kubio_ai_check_shop_categories_exist',
391 'permission_callback' => function () {
392 return current_user_can( 'edit_theme_options' );
393 },
394 )
395 );
396 register_rest_route(
397 $namespace,
398 '/ai/get-category-products',
399 array(
400 'methods' => 'POST',
401 'callback' => 'kubio_ai_get_category_products',
402 'permission_callback' => function () {
403 return current_user_can( 'edit_theme_options' );
404 },
405 )
406 );
407
408 register_rest_route(
409 $namespace,
410 '/ai/save-products-for-category',
411 array(
412 'methods' => 'POST',
413 'callback' => 'kubio_ai_save_products_by_category',
414 'permission_callback' => function () {
415 return current_user_can( 'edit_theme_options' );
416 },
417 )
418 );
419 register_rest_route(
420 $namespace,
421 '/ai/save-products-categories',
422 array(
423 'methods' => 'POST',
424 'callback' => 'kubio_ai_save_products_categories',
425 'permission_callback' => function () {
426 return current_user_can( 'edit_theme_options' );
427 },
428 )
429 );
430
431 register_rest_route(
432 $namespace,
433 '/ai/check-pages-exist',
434 array(
435 'methods' => 'POST',
436 'callback' => 'kubio_ai_check_pages_exist',
437 'permission_callback' => function () {
438 return current_user_can( 'edit_theme_options' );
439 },
440 )
441 );
442
443 register_rest_route(
444 $namespace,
445 '/ai/check-categories-exist',
446 array(
447 'methods' => 'POST',
448 'callback' => 'kubio_ai_check_categories_exist',
449 'permission_callback' => function () {
450 return current_user_can( 'edit_theme_options' );
451 },
452 )
453 );
454
455 }
456 );
457
458
459 function kubio_ai_store_ai_key( $request ) {
460 $key = sanitize_text_field( Arr::get( $request, 'key', '' ) );
461 kubio_ai_set_key( $key );
462
463 return array();
464 }
465
466 function kubio_ai_get_general_settings() {
467 return (object) Flags::get( 'aiSettings', array() );
468 }
469
470
471 function kubio_ai_store_general_settings( WP_REST_Request $request ) {
472 Flags::set( 'aiSettings', $request['settings'] );
473 return true;
474 }
475
476 function kubio_get_commercial_flow_settings() {
477 return (object) Flags::get( 'commercialFlowSettings', array() );
478 }
479
480
481 function kubio_store_commercial_flow_settings( WP_REST_Request $request ) {
482 Flags::set(
483 'commercialFlowSettings',
484 array(
485 'disabled' => $request->get_param( 'disabled' ),
486 )
487 );
488 return true;
489 }
490
491 function kubio_utils_data_add_ai_settings( $data ) {
492 $data['aiSettings'] = kubio_ai_get_general_settings();
493 $data['aiLanguages'] = kubio_ai_content_languages();
494 $data['aiLanguageStyles'] = kubio_ai_content_language_styles();
495 $data['aiBusinessTypes'] = kubio_ai_business_types();
496 $data['aiIsConnected'] = ! ! kubio_ai_get_key();
497
498 return $data;
499 }
500
501 add_filter( 'kubio/kubio-utils-data/extras', 'kubio_utils_data_add_ai_settings' );
502
503
504 function kubio_ai_get_service_info() {
505 return kubio_ai_call_api( 'v1/info' );
506 }
507
508 function kubio_ai_get_service_usage( WP_REST_Request $request ) {
509 return kubio_ai_call_api(
510 'v1/usage',
511 array(),
512 array(
513 'page' => Arr::get( $request, 'page', 1 ),
514 'per_page' => Arr::get( $request, 'perPage', 20 ),
515 'order' => json_encode(
516 array(
517 'field' => 'created_at',
518 'direction' => 'DESC',
519 )
520 ),
521 )
522 );
523 }
524
525 function kubio_ai_get_site_structure( WP_REST_Request $request ) {
526 return kubio_ai_call_api(
527 'v1/generate-site-structure',
528 array(
529 'siteContext' => Arr::get( $request, 'siteContext', array() ),
530 'pageContext' => Arr::get( $request, 'pageContext', array() ),
531 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
532 'theme' => Arr::get( $request, 'theme', null ),
533 'importDesignIndex' => Arr::get( $request, 'importDesignIndex', null ),
534 )
535 );
536 }
537
538
539 function kubio_ai_get_site_mood( WP_REST_Request $request ) {
540 return kubio_ai_call_api(
541 'v1/determine-site-mood',
542 array(
543 'siteContext' => Arr::get( $request, 'siteContext', array() ),
544 'pageContext' => Arr::get( $request, 'pageContext', array() ),
545 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
546 )
547 );
548 }
549
550 function kubio_ai_get_color_scheme( WP_REST_Request $request ) {
551 return kubio_ai_call_api(
552 'v1/generate-color-scheme',
553 array(
554 'siteContext' => Arr::get( $request, 'siteContext', array() ),
555 'pageContext' => Arr::get( $request, 'pageContext', array() ),
556 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
557 'mood' => Arr::get( $request, 'mood', 'neutral' ),
558 'primaryColors' => Arr::get( $request, 'primaryColors', array() ),
559 'remainingRetries' => Arr::get( $request, 'remainingRetries', null ),
560 )
561 );
562 }
563
564
565 function kubio_ai_get_page_structure( WP_REST_Request $request ) {
566 return kubio_ai_call_api(
567 'v1/generate-page-structure',
568 array(
569 'siteContext' => Arr::get( $request, 'siteContext', array() ),
570 'pageContext' => Arr::get( $request, 'pageContext', array() ),
571 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
572 'sections' => Arr::get( $request, 'allowedSections', array() ),
573 'rules' => Arr::get( $request, 'rules', array() ),
574 )
575 );
576 }
577 function kubio_ai_get_default_homepage_sections_summaries_by_anchor( WP_REST_Request $request ) {
578 return kubio_ai_call_api(
579 'v1/get-default-homepage-sections-summaries-by-anchor',
580 array(
581 'siteContext' => Arr::get( $request, 'siteContext', array() ),
582 'pageContext' => Arr::get( $request, 'pageContext', array() ),
583 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
584 'rules' => Arr::get( $request, 'rules', array() ),
585 'theme' => Arr::get( $request, 'theme', null ),
586 'importDesignIndex' => Arr::get( $request, 'importDesignIndex', null ),
587 'colorSchemeAndTypography' => Arr::get( $request, 'colorSchemeAndTypography', null ),
588 )
589 );
590 }
591 function kubio_ai_get_generated_data_stored_in_the_database( WP_REST_Request $request ) {
592 $with_tests = Utils::getShouldUseAiSitesWithTesting();
593 return kubio_ai_call_api(
594 'v1/get-generated-data-stored-in-the-database',
595 array(
596 'siteContext' => Arr::get( $request, 'siteContext', array() ),
597 'pageContext' => Arr::get( $request, 'pageContext', array() ),
598 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
599 'rules' => Arr::get( $request, 'rules', array() ),
600 'theme' => Arr::get( $request, 'theme', null ),
601 'importDesignIndex' => Arr::get( $request, 'importDesignIndex', null ),
602 'colorSchemeAndTypography' => Arr::get( $request, 'colorSchemeAndTypography', null ),
603 'testing' => $with_tests
604 )
605 );
606 }
607
608
609 function kubio_ai_get_page_section_content( WP_REST_Request $request ) {
610 return kubio_ai_call_api(
611 'v1/generate-page-section',
612 array(
613 'siteContext' => Arr::get( $request, 'siteContext', array() ),
614 'pageContext' => Arr::get( $request, 'pageContext', array() ),
615 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
616
617 'structure' => Arr::get( $request, 'structure', array() ),
618 'category' => Arr::get( $request, 'category', 'section' ),
619 'summary' => Arr::get( $request, 'summary', '' ),
620 'rules' => Arr::get( $request, 'rules', array() ),
621
622 'sectionParams' => Arr::get( $request, 'sectionParams', array() ),
623 )
624 );
625 }
626
627 function kubio_ai_get_default_homepage_sections_used_images( WP_REST_Request $request ) {
628 return kubio_ai_call_api(
629 'v2/get-default-homepage-sections-used-images',
630 array(
631 'siteContext' => Arr::get( $request, 'siteContext', array() ),
632 'theme' => Arr::get( $request, 'theme', null ),
633 'importDesignIndex' => Arr::get( $request, 'importDesignIndex', null ),
634 )
635 );
636 }
637 function kubio_ai_update_default_homepage_sections_used_images( WP_REST_Request $request ) {
638 return kubio_ai_call_api(
639 'v2/update-default-homepage-sections-used-images',
640 array(
641 'siteContext' => Arr::get( $request, 'siteContext', array() ),
642 'theme' => Arr::get( $request, 'theme', null ),
643 'importDesignIndex' => Arr::get( $request, 'importDesignIndex', null ),
644 'content' => Arr::get( $request, 'content', null ),
645 )
646 );
647 }
648
649
650 function kubio_ai_get_rephrase_section_content( WP_REST_Request $request ) {
651 return kubio_ai_call_api(
652 'v1/rephrase-page-section',
653 array(
654 'siteContext' => Arr::get( $request, 'siteContext', array() ),
655 'pageContext' => Arr::get( $request, 'pageContext', array() ),
656 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
657
658 'structure' => Arr::get( $request, 'structure', array() ),
659 'category' => Arr::get( $request, 'category', 'section' ),
660 'summary' => Arr::get( $request, 'summary', '' ),
661 'rules' => Arr::get( $request, 'rules', array() ),
662
663 'sectionParams' => Arr::get( $request, 'sectionParams', array() ),
664 )
665 );
666 }
667
668
669
670
671 function kubio_ai_search_image( WP_REST_Request $request ) {
672 $dimensions = array();
673
674 if ( Arr::get( $request, 'initialImage', '' ) ) {
675 // original
676 $dimensions = kubio_ai_get_original_image_dimensions( Arr::get( $request, 'initialImage', '' ) );
677 } else {
678 $width = Arr::get( $request, 'width', null );
679 $height = Arr::get( $request, 'height', null );
680
681 if ( $width ) {
682 $dimensions['width'] = $width;
683 }
684
685 if ( $height ) {
686 $dimensions['height'] = $height;
687 }
688 }
689
690 $orientation = Arr::get( $request, 'orientation', null );
691 if ( $orientation ) {
692 $dimensions['orientation'] = $orientation;
693 }
694
695 return kubio_ai_call_api(
696 'v1/search-media',
697 array_merge(
698 $dimensions,
699 array(
700 'type' => 'image',
701 'search' => kubio_shuffle_terms( Arr::get( $request, 'search', '' ) ),
702 'per_page' => Arr::get( $request, 'perPage', 10 ),
703 'page' => Arr::get( $request, 'page', 1 ),
704 'color' => Arr::get( $request, 'color', null ),
705 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
706 'skip_orientation' => Arr::get( $request, 'skipOrientation', null ),
707 'crop' => Arr::get( $request, 'crop', null ),
708 )
709 )
710 );
711 }
712
713 function kubio_shuffle_terms( $str ) {
714 // use this to generate more different images between calls
715 $terms = explode( ',', $str );
716 if ( is_array( $terms ) ) {
717 shuffle( $terms );
718 return implode( ',', $terms );
719 }
720
721 return $str;
722 }
723
724 function kubio_ai_search_video( WP_REST_Request $request ) {
725
726 return kubio_ai_call_api(
727 'v1/search-media',
728 array(
729 'type' => 'video',
730 'search' => Arr::get( $request, 'search', '' ),
731 'per_page' => Arr::get( $request, 'perPage', 10 ),
732 'page' => Arr::get( $request, 'page', 1 ),
733 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
734 )
735 );
736 }
737
738 function kubio_ai_prompt_search_image( WP_REST_Request $request ) {
739 $dimensions = kubio_ai_get_original_image_dimensions( Arr::get( $request, 'initialImage', '' ) );
740 return kubio_ai_call_api(
741 'v1/prompt-search-media',
742 array_merge(
743 $dimensions,
744 array(
745 'type' => 'image',
746 'prompt' => Arr::get( $request, 'prompt', '' ),
747 'per_page' => Arr::get( $request, 'perPage', 10 ),
748 'page' => Arr::get( $request, 'page', 1 ),
749 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
750 )
751 )
752 );
753 }
754
755 function kubio_ai_prompt_search_video( WP_REST_Request $request ) {
756 return kubio_ai_call_api(
757 'v1/prompt-search-media',
758 array(
759 'type' => 'video',
760 'prompt' => Arr::get( $request, 'prompt', '' ),
761 'per_page' => Arr::get( $request, 'perPage', 10 ),
762 'page' => Arr::get( $request, 'page', 1 ),
763 'media_attrs' => Arr::get( $request, 'mediaAttrs', null ),
764 )
765 );
766 }
767
768 // ---------------
769
770
771
772 function kubio_ai_get_processed_text( WP_REST_Request $request ) {
773
774 return kubio_ai_call_api(
775 'v1/process-text',
776 array(
777 'siteContext' => Arr::get( $request, 'siteContext', array() ),
778 'pageContext' => Arr::get( $request, 'pageContext', array() ),
779 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
780 'action' => Arr::get( $request, 'action', '' ),
781 'content' => Arr::get( $request, 'content', '' ),
782 'extras' => Arr::get( $request, 'extras', '' ),
783
784 )
785 );
786 }
787
788
789
790 function kubio_ai_get_summarized_prompt( WP_REST_Request $request ) {
791 return kubio_ai_call_api(
792 'v1/process-text',
793 array(
794 'siteContext' => Arr::get( $request, 'siteContext', array() ),
795 'pageContext' => Arr::get( $request, 'pageContext', array() ),
796 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
797 'action' => 'summarize',
798 'content' => Arr::get( $request, 'prompt', '' ),
799 )
800 );
801 }
802 function kubio_ai_get_prompt( WP_REST_Request $request ) {
803 return kubio_ai_call_api(
804 'v1/process-text',
805 array(
806 'siteContext' => Arr::get( $request, 'siteContext', array() ),
807 'pageContext' => Arr::get( $request, 'pageContext', array() ),
808 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
809 'action' => 'prompt',
810 'prompt' => Arr::get( $request, 'prompt', '' ),
811 'original' => Arr::get( $request, 'originalContent', '' ),
812 'short' => Arr::get( $request, 'short', false ),
813 'type' => Arr::get( $request, 'type', 'text' ),
814 )
815 );
816 }
817
818
819 function kubio_ai_change_text( WP_REST_Request $request ) {
820
821 return kubio_ai_call_api(
822 'v1/process-text',
823 array(
824 'siteContext' => Arr::get( $request, 'siteContext', array() ),
825 'pageContext' => Arr::get( $request, 'pageContext', array() ),
826 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
827 'action' => Arr::get( $request, 'type', 'tone' ),
828 'to' => Arr::get( $request, 'promptData', '' ),
829 'content' => Arr::get( $request, 'text', '' ),
830 )
831 );
832 }
833
834 function kubio_ai_sd_image_from_text( WP_REST_Request $request ) {
835
836 $image_size = Arr::get( $request, 'imageSize', array( 1024, 1024 ) );
837 list($width, $height) = kubio_ai_sd_xl_determine_appropriate_size( ...$image_size );
838
839 $response = kubio_ai_call_api(
840 'v1/image-generation/text-to-image',
841 array(
842 'steps' => 40,
843 'width' => 512,
844 'height' => 512,
845 'seed' => 0,
846 'cfg_scale' => 5,
847 'samples' => 1,
848 'style_preset' => 'photographic',
849 'text_prompts' => array(
850 array(
851 'text' => Arr::get( $request, 'prompt', '' ),
852 'weight' => 1,
853 ),
854 array(
855 'text' => 'blurry, bad',
856 'weight' => -1,
857 ),
858 ),
859 'width' => $width,
860 'height' => $height,
861 )
862 );
863
864 if ( is_wp_error( $response ) ) {
865 return $response;
866 }
867
868 $artifacts = Arr::get( $response, 'artifacts', array() );
869
870 if ( ! count( $artifacts ) ) {
871 return new \WP_Error(
872 'error_no_image_generate',
873 __( 'No image was generated', 'kubio' )
874 );
875 }
876
877 $images = array();
878 $errors = array();
879 foreach ( $artifacts as $image ) {
880 $filename = wp_generate_uuid4() . '.jpg';
881 $upload = Importer::base64ToImage( $filename, $image['base64'] );
882 if ( is_wp_error( $upload ) ) {
883 $errors[] = $upload;
884 } else {
885 $images[] = $upload;
886 }
887 }
888
889 if ( ! empty( $errors ) ) {
890 return $errors[0];
891 }
892
893 return $images[0]['url'];
894 }
895
896
897 function kubio_ai_get_blog_structure( WP_REST_Request $request ) {
898
899 $response = kubio_ai_call_api(
900 'v1/generate-blog-structure',
901 array(
902 'siteContext' => Arr::get( $request, 'siteContext', array() ),
903 'pageContext' => Arr::get( $request, 'pageContext', array() ),
904 'pageTitle' => Arr::get( $request, 'pageTitle', '' ),
905 )
906 );
907
908 return $response;
909 }
910 function kubio_ai_get_blog_structure_and_articles( WP_REST_Request $request ) {
911
912 $response = kubio_ai_call_api(
913 'v1/generate-blog-structure-and-articles',
914 array(
915 'siteContext' => Arr::get( $request, 'siteContext', array() ),
916 'pageContext' => Arr::get( $request, 'pageContext', array() ),
917 'pageTitle' => Arr::get( $request, 'pageTitle', '' ),
918 )
919 );
920
921 return $response;
922 }
923
924 function kubio_ai_get_translate_site_structure( WP_REST_Request $request ) {
925
926 $response = kubio_ai_call_api(
927 'v1/translate-blog-site-structure',
928 array(
929 'siteContext' => Arr::get( $request, 'siteContext', array() ),
930 'pageContext' => Arr::get( $request, 'pageContext', array() ),
931 'pageTitle' => Arr::get( $request, 'pageTitle', '' ),
932 'pages' => Arr::get( $request, 'pages', array() ),
933 )
934 );
935
936 return $response;
937 }
938
939 function kubio_ai_get_category_articles( WP_REST_Request $request ) {
940
941 return kubio_ai_call_api(
942 'v1/generate-blog-articles',
943 array(
944 'siteContext' => Arr::get( $request, 'siteContext', array() ),
945 'pageContext' => Arr::get( $request, 'pageContext', array() ),
946 'pageTitle' => Arr::get( $request, 'pageTitle', '' ),
947 'categoryTitle' => Arr::get( $request, 'categoryTitle', array() ),
948 )
949 );
950 }
951
952 function kubio_ai_save_articles_by_category( WP_REST_Request $request ) {
953 $category_id = Arr::get( $request, 'categoryID', 0 );
954 $articles = Arr::get( $request, 'articles', array() );
955
956 $posts = BlogContent::save_articles_by_category(
957 $articles,
958 $category_id
959 );
960
961 return array(
962 'content' => $posts,
963 );
964 }
965
966 function kubio_ai_check_pages_exist( WP_REST_Request $request ) {
967
968 $pages = Arr::get( $request, 'pages', array() );
969
970 $existing_pages = array();
971 if ( ! empty( $pages ) ) {
972 foreach ( $pages as $page ) {
973 // get wp post by title
974 // phpcs:disable WordPress.WP.DeprecatedFunctions.get_page_by_titleFound
975 $post = get_page_by_title( $page, OBJECT, 'page' );
976
977 if ( $post ) {
978 $existing_pages[ $page ] = array(
979 'id' => $post->ID,
980 'ID' => $post->ID,
981
982 'title' => array(
983 'rendered' => $post->post_title,
984 'raw' => $post->post_title,
985 ),
986 'link' => get_post_permalink( $post ),
987 );
988 }
989 }
990 }
991
992 return array(
993 'content' => $existing_pages,
994 );
995 }
996
997 function kubio_ai_check_categories_exist( WP_REST_Request $request ) {
998 $categories = Arr::get( $request, 'categories', array() );
999 $taxonomy = Arr::get(
1000 $request,
1001 'taxonomy',
1002 'category'
1003 );
1004 $existing_categories = array();
1005 if ( ! empty( $categories ) ) {
1006 foreach ( $categories as $category ) {
1007 // get wp category by title
1008 $cat = get_term_by( 'name', $category, $taxonomy );
1009
1010 if ( $cat ) {
1011 $existing_categories[ $category ] = array(
1012 'id' => $cat->term_id,
1013 'name' => $cat->name,
1014 'link' => get_term_link( $cat->term_id, $taxonomy ),
1015 'title' => array(
1016 'rendered' => $cat->name,
1017 'raw' => $cat->name,
1018 ),
1019 );
1020
1021 }
1022 }
1023 }
1024
1025 return array(
1026 'content' => $existing_categories,
1027 );
1028 }
1029
1030 function kubio_ai_check_shop_categories_exist( WP_REST_Request $request ) {
1031 $categories = Arr::get( $request, 'categories', array() );
1032 $taxonomy = Arr::get(
1033 $request,
1034 'taxonomy',
1035 'product_cat'
1036 );
1037 $existing_categories = array();
1038 if ( ! empty( $categories ) ) {
1039 foreach ( $categories as $category ) {
1040 // get wp category by title
1041 $cat = get_term_by( 'name', $category, $taxonomy );
1042
1043 if ( $cat ) {
1044 $existing_categories[ $category ] = array(
1045 'id' => $cat->term_id,
1046 'name' => $cat->name,
1047 'link' => get_term_link( $cat->term_id, $taxonomy ),
1048 'title' => array(
1049 'rendered' => $cat->name,
1050 'raw' => $cat->name,
1051 ),
1052 );
1053
1054 }
1055 }
1056 }
1057
1058 return array(
1059 'content' => $existing_categories,
1060 );
1061 }
1062
1063 function kubio_ai_get_shop_structure( WP_REST_Request $request ) {
1064 return kubio_ai_call_api(
1065 'v1/generate-shop-structure',
1066 array(
1067 'siteContext' => Arr::get( $request, 'siteContext', array() ),
1068 'pageContext' => Arr::get( $request, 'pageContext', array() ),
1069 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
1070 )
1071 );
1072 }
1073
1074 function kubio_ai_get_category_products( WP_REST_Request $request ) {
1075
1076 return kubio_ai_call_api(
1077 'v1/generate-shop-products',
1078 array(
1079 'siteContext' => Arr::get( $request, 'siteContext', array() ),
1080 'pageContext' => Arr::get( $request, 'pageContext', array() ),
1081 'pageTitle' => Arr::get( $request, 'pageTitle', array() ),
1082 'categoryTitle' => Arr::get( $request, 'categoryTitle', array() ),
1083 )
1084 );
1085 }
1086
1087 function kubio_ai_save_products_by_category( WP_REST_Request $request ) {
1088 $category_id = Arr::get( $request, 'categoryID', 0 );
1089 $products = Arr::get( $request, 'products', array() );
1090
1091 $posts = ShopContent::save_products_by_category(
1092 $products,
1093 $category_id
1094 );
1095
1096 return array(
1097 'content' => $posts,
1098 );
1099 }
1100 function kubio_ai_save_products_categories( WP_REST_Request $request ) {
1101 $categories = Arr::get( $request, 'categories', 0 );
1102
1103 $posts = ShopContent::save_products_categories(
1104 $categories
1105 );
1106
1107 return array(
1108 'content' => $posts,
1109 );
1110 }
1111
1112
1113