PluginProbe ʕ •ᴥ•ʔ
AutoWP – AI Content Writer & Rewriter / 2.1.1
AutoWP – AI Content Writer & Rewriter v2.1.1
2.3.0 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.10 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9
autowp-ai-content-writer-rewriter / autowp.php
autowp-ai-content-writer-rewriter Last commit date
assets 1 year ago includes 1 year ago languages 1 year ago LICENSE.txt 1 year ago autowp.php 1 year ago index.php 1 year ago readme.txt 1 year ago
autowp.php
6878 lines
1 <?php
2
3
4
5 /**
6 * Plugin Name: AutoWP - AI Content Writer & Rewriter
7 * Plugin URI: https://autowp.app
8 * Description: AI Content Writer & Rewriter. Write content with AI from zero. Import content from RSS, Wordpress and rewrite with AI. Generate SEO optimized content,tags,title and generate image. ChatGPT, Content Writer, Auto Content Writer, Image Generator, AutoGPT, ChatPDF, SEO optimizer, AI Training.
9 * Version: 2.1.1
10 * Requires at least: 5.2
11 * Requires PHP: 7.2
12 * Author: Neuralabz LTD.
13 * Author URI: https://autowp.app
14 * License: GPL v2 or later
15 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
16 * Text Domain: autowp
17 * Domain Path: /languages
18 */
19
20
21
22 defined( 'ABSPATH' ) or die( 'PERMİSSİON ERROR!' );
23
24 require plugin_dir_path( __FILE__ ) . 'includes/new-wp-website-form.php';
25 require plugin_dir_path( __FILE__ ) . 'includes/new-rss-website-form.php';
26 require plugin_dir_path( __FILE__ ) . 'includes/new-ai-website-form.php';
27 require plugin_dir_path( __FILE__ ) . 'includes/new-news-website-form.php';
28 require plugin_dir_path( __FILE__ ) . 'includes/new-own-ai-agent-form.php';
29
30
31
32
33
34 // Enqueque JS Files
35 function autowp_enqueue_scripts() {
36 $autowp_my_plugin_dir = plugin_dir_url(__FILE__);
37
38
39 //Enqueque AutoWP JS File
40 wp_register_script( 'bootstrapjs', $autowp_my_plugin_dir . '/assets/js/bootstrap.min.js', array('jquery'), filemtime( $autowp_my_plugin_dir . '/assets/js/bootstrap.min.js' ), true );
41
42 wp_enqueue_script( 'bootstrapjs' );
43
44 wp_register_script( 'autowpjs',$autowp_my_plugin_dir.'/assets/js/autowp.js' , array('jquery'), false, true );
45 wp_enqueue_script( 'autowpjs' );
46
47 wp_register_script( 'autowp_ai_modal',$autowp_my_plugin_dir.'/assets/js/autowp_ai_modal.js' , array('jquery'), false, true );
48 wp_enqueue_script( 'autowp_ai_modal' );
49
50 wp_register_script( 'autowp_rewriting_modal',$autowp_my_plugin_dir.'/assets/js/autowp_rewriting_modal.js' , array('jquery'), false, true );
51 wp_enqueue_script( 'autowp_rewriting_modal' );
52
53 wp_register_script( 'autowp_bootstrap_bundle',$autowp_my_plugin_dir.'/assets/js/bootstrap.bundle.min.js' , array('jquery','autowp_jquery_ui'), false, true );
54 wp_enqueue_script( 'autowp_bootstrap_bundle' );
55
56 wp_register_script( 'autowp_jquery_ui',$autowp_my_plugin_dir.'/assets/js/jquery-ui.min.js' , array('jquery'), false, true );
57 wp_enqueue_script( 'autowp_jquery_ui' );
58
59 wp_register_script( 'autowp_sortable_list',$autowp_my_plugin_dir.'/assets/js/sortable_list.js' , array('jquery'), false, true );
60 wp_enqueue_script( 'autowp_sortable_list' );
61
62 wp_enqueue_script('autowp-toggle-js', plugins_url('assets/js/admin-toggle.js', __FILE__), array('jquery'), '1.0', true);
63
64
65
66
67
68
69
70
71
72 }
73
74 add_action('admin_enqueue_scripts','autowp_enqueue_scripts');
75
76
77 function autowp_toggle_website() {
78 // Güvenlik kontrolü: Nonce doğrulaması
79 check_ajax_referer('autowp_toggle_nonce', 'security');
80 $website_id = intval($_POST['id']);
81 global $wpdb;
82 $table_name = $wpdb->prefix . 'autowp_wordpress_websites';
83
84 // Mevcut "active" değerini al (eğer yoksa varsayılan olarak 1 kabul edilir)
85 $current = $wpdb->get_var($wpdb->prepare("SELECT active FROM $table_name WHERE id = %d", $website_id));
86 $current = isset($current) ? intval($current) : 1;
87 // Yeni durumu tersine çevir: Eğer aktifse 0 (pasif) yap, pasifse 1 (aktif) yap
88 $new_status = $current ? 0 : 1;
89
90 // Veritabanında güncelleme yapın
91 $wpdb->update($table_name, array('active' => $new_status), array('id' => $website_id), array('%d'), array('%d'));
92 wp_send_json_success(array('new_status' => $new_status));
93 }
94 add_action('wp_ajax_autowp_toggle_website', 'autowp_toggle_website');
95
96
97
98 //Set FAQ Schema
99
100 // JSON-LD ekleme fonksiyonu
101
102
103 // 4. Post başlığında meta veriyi kontrol et ve şema yapısını ekle
104 function inject_faq_schema_into_head() {
105 if (is_single()) {
106 global $post;
107 $faq_schema = get_post_meta($post->ID, '_faq_schema', true);
108
109 // Meta veride schema varsa header'a ekleyelim
110 if ($faq_schema) {
111 // Yalnızca belirli HTML etiketlerine izin verelim
112 $allowed_tags = array(
113 'script' => array(
114 'type' => true,
115 ),
116 );
117
118 echo wp_kses($faq_schema, $allowed_tags);
119 }
120 }
121 }
122 add_action('wp_head', 'inject_faq_schema_into_head');
123
124
125
126
127
128
129 //Enqueque CSS Files
130 function autowp_enqueue_styles(){
131 $my_plugin_dir = plugin_dir_url(__FILE__);
132
133 $screen = get_current_screen();
134 $slug = $screen->id;
135
136
137
138
139
140 if($slug == 'toplevel_page_autowp_menu' || $slug == 'autowp_page_autowp_manualPost' || $slug == 'autowp_page_autowp_automaticPost' || $slug == 'admin_page_add_new_wp_website_form' || $slug == 'autowp_page_autowp_settings' || $slug == 'admin_page_add_new_rss_website_form' || $slug == 'admin_page_add_new_ai_website_form' || $slug == 'autowp_page_autowp_add_new_website_form' || $slug == 'admin_page_add_new_agenticscraper_form' || $slug == 'admin_page_manual_post_wp_website_form' || $slug == 'admin_page_manual_post_rss_website_form' || $slug == 'admin_page_manual_post_ai_website_form' || $slug == 'admin_page_manual_post_agenticscraper_website_form' || $slug == 'admin_page_manual_post_news_website_form' || $slug == 'admin_page_add_new_news_website_form' || $slug == 'admin_page_autowp_promptschemes' || $slug == 'autowp_page_autowp_promptSettings' or $slug == 'admin_page_autowp_rewriting_promptschemes' or $slug=='admin_page_autowp-setup' ){
141 wp_register_style('autowp_bootstrap', $my_plugin_dir.'assets/css/bootstrap.min.css', array(), 1);
142 wp_enqueue_style('autowp_bootstrap');
143
144
145
146
147 wp_register_style('autowp_jquery_ui', $my_plugin_dir.'assets/css/jquery-ui.css', array(), 1);
148 wp_enqueue_style('autowp_jquery_ui');
149
150
151 wp_register_style('autowp_loader', $my_plugin_dir.'assets/css/loader.css', array(), 1);
152 wp_enqueue_style('autowp_loader');
153
154 wp_register_style('autowp_style', $my_plugin_dir.'assets/css/style.css', array(), 1);
155 wp_enqueue_style('autowp_style');
156
157
158
159
160
161
162 }
163
164
165
166
167 }
168
169 add_action('admin_print_styles','autowp_enqueue_styles');
170
171 //Register AutoWP API with Domain
172
173 // Eklenti etkinleştirildiğinde çalışacak fonksiyon
174 function autowp_activate() {
175 $settings = unserialize(get_option('autowp_settings'));
176
177 // API e-posta ve anahtarını kontrol et
178 if (empty($settings['api_email']) || empty($settings['api_key'])) {
179 // Kullanıcıyı kurulum sayfasına yönlendir
180 add_option('autowp_show_setup', true);
181 }
182 }
183 register_activation_hook(__FILE__, 'autowp_activate');
184
185 // Admin sayfasına yönlendirme
186 function autowp_redirect_to_setup() {
187 if (get_option('autowp_show_setup')) {
188 delete_option('autowp_show_setup');
189 wp_redirect(admin_url('admin.php?page=autowp-setup'));
190 exit;
191 }
192 }
193 add_action('admin_init', 'autowp_redirect_to_setup');
194
195
196
197 function autowp_get_page_slug_from_website_type($website_type){
198
199 switch($website_type){
200 case 'wordpress':
201 return 'add_new_wp_website_form';
202 case 'rss':
203 return 'add_new_rss_website_form';
204 case 'ai':
205 return 'add_new_ai_website_form';
206 case 'news':
207 return 'add_new_news_website_form';
208 case 'agenticscraper':
209 return 'add_new_agenticscraper_form';
210 default:
211 return '';
212 }
213
214 }
215
216 //WP-CRON START
217
218
219 function autowp_get_wpcron_time($time){
220
221 switch($time){
222 case 1:
223 return 'hourly';
224 case 2:
225 return 'twicedaily';
226 case 3:
227 return 'daily';
228 case 4:
229 return 'weekly';
230 default:
231 return 'hourly';
232
233 }
234
235 }
236
237
238 function autowp_set_featured_image($image_url, $post_id) {
239 $upload_dir = wp_upload_dir();
240
241 // Kullanılacak güvenli fonksiyon: wp_remote_get
242 $response = wp_remote_get($image_url);
243
244 // HTTP hata kontrolü
245 if (is_wp_error($response) || wp_remote_retrieve_response_code($response) !== 200) {
246 return false;
247 }
248
249 $image_data = wp_remote_retrieve_body($response);
250
251 if ($image_data) {
252 $filename = sanitize_file_name(basename($image_url));
253 $file_path = trailingslashit($upload_dir['path']) . $filename;
254 $file_path = wp_unique_filename($upload_dir['path'], $filename); // Make sure the file name is unique
255
256 // Güvenli bir şekilde dosyayı kaydet
257 $file_saved = wp_upload_bits($filename, null, $image_data);
258
259 if (!$file_saved['error']) {
260 $file = $file_saved['file'];
261
262 $wp_filetype = wp_check_filetype($file, null);
263
264 $attachment = array(
265 'post_mime_type' => $wp_filetype['type'],
266 'post_title' => $filename,
267 'post_content' => '',
268 'post_status' => 'inherit'
269 );
270
271 // Use the 'wp_insert_attachment_data' filter to modify attachment data before insertion
272 $attachment = apply_filters('wp_insert_attachment_data', $attachment, $file, $post_id);
273
274 $attach_id = wp_insert_attachment($attachment, $file, $post_id);
275
276 if (!is_wp_error($attach_id)) {
277 require_once ABSPATH . 'wp-admin/includes/image.php';
278 $attach_data = wp_generate_attachment_metadata($attach_id, $file);
279 wp_update_attachment_metadata($attach_id, $attach_data);
280
281 return $attach_id;
282 } else {
283 // If there's an error in attachment insertion, delete the file
284 unlink($file);
285 }
286 }
287 }
288
289 return false;
290 }
291
292
293
294
295
296
297 function autowp_upload_image_to_media($image_url) {
298 require_once(ABSPATH . 'wp-admin/includes/image.php');
299 require_once(ABSPATH . 'wp-admin/includes/file.php');
300 require_once(ABSPATH . 'wp-admin/includes/media.php');
301
302 // Using WordPress HTTP API to get image data
303 $response = wp_safe_remote_get($image_url);
304
305 if (is_wp_error($response)) {
306 return false;
307 }
308
309 $image_data = wp_remote_retrieve_body($response);
310
311 // Get the file name and extension
312 $file_name = basename($image_url);
313 $file_array = wp_upload_bits($file_name, null, $image_data);
314
315 // Check for errors during upload
316 if ($file_array['error']) {
317 return false;
318 }
319
320 // Create the attachment post
321 $attachment = array(
322 'post_mime_type' => $file_array['type'],
323 'post_title' => sanitize_file_name($file_name),
324 'post_content' => '',
325 'post_status' => 'inherit',
326 );
327
328 // Insert the attachment into the media library
329 $attachment_id = wp_insert_attachment($attachment, $file_array['file']);
330
331 // Generate the metadata for the attachment
332 $attachment_data = wp_generate_attachment_metadata($attachment_id, $file_array['file']);
333
334 // Update the attachment metadata
335 wp_update_attachment_metadata($attachment_id, $attachment_data);
336
337 // Return the upload URL of the image
338 return wp_get_attachment_url($attachment_id);
339 }
340
341
342
343 function autowp_upload_and_replace_image_sources($html) {
344 $dom = new DOMDocument();
345 $dom->encoding = 'UTF-8';
346 libxml_use_internal_errors(true);
347 $dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
348 libxml_clear_errors();
349
350 $images = $dom->getElementsByTagName('img');
351 foreach ($images as $image) {
352 $src = $image->getAttribute('src');
353 $new_image_url = autowp_upload_image_to_media($src);
354 if ($new_image_url) {
355 $image->setAttribute('src', $new_image_url);
356 }
357 }
358
359 return $dom->saveHTML();
360 }
361
362 function get_excerpt_from_content($content) {
363 // HTML etiketlerini kaldır
364 $plain_text_content = strip_tags($content);
365
366 // HTML özel karakterlerini dönüştür
367 $plain_text_content = html_entity_decode($plain_text_content, ENT_QUOTES | ENT_HTML5, 'UTF-8');
368
369 // Metni cümlelere böl ('.', '!' veya '?' sonrası boşluk karakteriyle ayır)
370 $sentences = preg_split('/(\.|\!|\?)\s+/', $plain_text_content, 3, PREG_SPLIT_DELIM_CAPTURE);
371
372 // İlk iki cümleyi birleştir
373 $excerpt = isset($sentences[0]) ? $sentences[0] : '';
374 $excerpt .= isset($sentences[1]) ? $sentences[1] : '';
375 $excerpt .= isset($sentences[2]) ? $sentences[2] : '';
376 $excerpt .= isset($sentences[3]) ? $sentences[3] : '';
377
378 return trim($excerpt);
379 }
380
381 function autowp_set_new_post($post_title, $post_content, $post_status, $post_author, $post_type, $featured_image_url, $post_category, $post_tags, $focus_keyword,$faq_schema) {
382
383 $post_content = autowp_upload_and_replace_image_sources($post_content);
384
385 //Set SEO
386 //focus keyword
387 $title_explode = explode(" ", $post_title);
388 // $focus_keyword = //$title_explode[0] . " " . $title_explode[1];
389
390 //Meta desc
391 $meta_desc = substr(strip_tags($post_content), 0, 155);
392
393 $meta_input = ["_yoast_wpseo_title" => $post_title, "_yoast_wpseo_metadesc" => $meta_desc, "_yoast_wpseo_focuskw" => $focus_keyword, "rank_math_title" => $post_title, "rank_math_description" => $meta_desc, "rank_math_focus_keyword" => $focus_keyword, "_faq_schema" => $faq_schema];
394
395
396
397 $post = array(
398 'post_title' => $post_title,
399 'post_content' => $post_content,
400 'post_status' => $post_status, // "publish" olarak ayarla
401 'post_author' => $post_author, // 1 olarak ayarla
402 'post_type' => $post_type, // "post" olarak ayarla
403 'post_category' => $post_category, //category array
404 'tags_input' => $post_tags, //tags
405 'meta_input' => $meta_input, //meta inputs
406 'post_excerpt' => get_excerpt_from_content($post_content)
407
408 );
409
410
411
412 $new_post_id = wp_insert_post($post);
413
414 if (!empty($featured_image_url)) {
415 $image_id = autowp_set_featured_image($featured_image_url, $new_post_id);
416 if ($image_id !== false) {
417 set_post_thumbnail($new_post_id, $image_id);
418 }
419 }
420
421 return $new_post_id; // Fonksiyonun sonunda bu satırı ekleyin
422
423 }
424
425
426
427
428
429
430 function autowp_wpcron_setAutoPosting(){
431
432 $settings = unserialize(get_option('autowp_settings'));
433
434 $wpcron_status = $settings['wpcron_status'];
435
436 if($wpcron_status === '1'){
437 autowp_wordpress_post();
438 }
439
440 }
441
442 add_filter('autowp_cron','autowp_wpcron_setAutoPosting');
443
444 function autowp_get_wp_autowp_wordpress_websites() {
445 global $wpdb;
446 $table_name = $wpdb->prefix . 'autowp_wordpress_websites';
447 $sql = "SELECT * FROM $table_name";
448 $results = $wpdb->get_results($wpdb->prepare($sql), ARRAY_A);
449 return $results;
450 }
451
452
453
454 function autowp_stringToArray($input) {
455 $numbers = explode(",", $input);
456 $result = array();
457
458 foreach ($numbers as $number) {
459 $result[] = (int)$number;
460 }
461
462 return $result;
463 }
464
465
466 function autowp_update_published_post_ids($new_post_ids) {
467 $autowp_settings = get_option('autowp_post_settings');
468 $autowp_settings = unserialize($autowp_settings);
469
470 // Update the published_post_ids value
471 $autowp_settings['published_post_ids'] = $new_post_ids;
472
473 // Serialize and update the option value
474 update_option('autowp_post_settings', serialize($autowp_settings));
475 }
476
477 function autowp_update_wp_cron_status($new_status) {
478 $autowp_settings = get_option('autowp_settings');
479 $autowp_settings = unserialize($autowp_settings);
480
481 // Update the published_post_ids value
482 $autowp_settings['wpcron_status'] = $new_status;
483
484 // Serialize and update the option value
485 update_option('autowp_settings', serialize($autowp_settings));
486 }
487
488 add_action('admin_notices', 'autowp_create_alert');
489
490 function autowp_create_alert() {
491 $alerts = get_option('autowp_alerts');
492 $settings = get_option('autowp_settings');
493 $settings = $settings ? unserialize($settings) : [];
494
495 $announcements = get_option('autowp_announcements'); // Duyuruları opsiyondan al
496 $dismissed_announcements = get_option('autowp_dismissed_announcements', []); // Kullanıcı tarafından gizlenmiş duyuruları al
497
498 // Eğer dismissed_announcements bir string ise, diziye çevir
499 if (!is_array($dismissed_announcements)) {
500 $dismissed_announcements = [];
501 }
502
503 // Eğer alert veya duyurular varsa
504 if (!empty($alerts) || !empty($announcements)) {
505 echo '
506 <div class="notice notice-info is-dismissible">
507 <p><strong>AutoWP Announcement:</strong></p>';
508
509 // Eğer alerts varsa göster
510 if (!empty($alerts)) {
511 echo '<p>' . esc_html($alerts) . '</p>';
512 }
513
514 // Eğer duyurular varsa, her birini ayrı bir satırda göster
515 if (!empty($announcements)) {
516 foreach ($announcements as $announcement_id => $announcement) {
517 // Eğer bu duyuru gizlenmediyse göster
518 if (!in_array($announcement_id, $dismissed_announcements)) {
519 echo '<p>' . esc_html($announcement['title']) . ': ' . wp_kses_post($announcement['message']) . '</p>';
520 echo '<button data-announcement-id="' . esc_attr($announcement_id) . '" class="button dismiss-announcement">Dismiss</button>';
521 }
522 }
523 }
524
525 echo '<p><a href="admin.php?page=autowp_menu" class="button button-primary">Upgrade Membership</a></p>
526 </div>';
527
528 // Bu butonlar için JavaScript ekle (AJAX ile belirli bir duyuruyu gizle)
529 echo '
530 <script type="text/javascript">
531 jQuery(document).on("click", ".dismiss-announcement", function() {
532 var announcement_id = jQuery(this).data("announcement-id");
533
534 var data = {
535 action: "autowp_dismiss_announcement",
536 security: "' . esc_js(wp_create_nonce("autowp_dismiss_nonce")) . '",
537 announcement_id: announcement_id
538 };
539
540 jQuery.post(ajaxurl, data, function(response) {
541 if(response.success) {
542 location.reload(); // Sayfayı yeniden yükle
543 }
544 });
545 });
546 </script>';
547 }
548
549 // İkinci alert: Setup kontrolü
550 if (empty($settings['api_email']) || empty($settings['api_key'])) {
551 echo '
552 <div class="notice notice-error is-dismissible">
553 <p><strong>AutoWP Setup Required</strong></p>
554 <p>AutoWP is not set up properly. To use this plugin, you need to complete the setup process.</p>
555 <p>If you do not complete the setup, AutoWP will not work correctly.</p>
556 <p><a href="admin.php?page=autowp-setup" class="button button-primary">Go to Setup</a></p>
557 </div>';
558 }
559 }
560
561 // AJAX isteğini ele alan fonksiyon
562 function autowp_dismiss_announcement() {
563 check_ajax_referer('autowp_dismiss_nonce', 'security');
564
565 if (isset($_POST['announcement_id'])) {
566 $announcement_id = sanitize_text_field($_POST['announcement_id']);
567
568 // Daha önce dismissed duyuruları al
569 $dismissed_announcements = get_option('autowp_dismissed_announcements', []);
570
571 // Eğer dismissed_announcements bir string ise, diziye çevir
572 if (!is_array($dismissed_announcements)) {
573 $dismissed_announcements = [];
574 }
575
576 // Yeni dismissed duyuruyu ekle
577 if (!in_array($announcement_id, $dismissed_announcements)) {
578 $dismissed_announcements[] = $announcement_id;
579 update_option('autowp_dismissed_announcements', $dismissed_announcements);
580 }
581
582 wp_send_json_success();
583 } else {
584 wp_send_json_error();
585 }
586 }
587 add_action('wp_ajax_autowp_dismiss_announcement', 'autowp_dismiss_announcement');
588
589
590
591 // Eklenti etkinleştirildiğinde çalışan fonksiyon
592 function autowp_announcements_activation() {
593 if ( ! wp_next_scheduled( 'autowp_fetch_announcements' ) ) {
594 wp_schedule_event( time(), 'ten_minutes', 'autowp_fetch_announcements' );
595 }
596 }
597 register_activation_hook( __FILE__, 'autowp_announcements_activation' );
598
599 // Eklenti devre dışı bırakıldığında çalışan fonksiyon
600 function autowp_announcements_deactivation() {
601 wp_clear_scheduled_hook( 'autowp_fetch_announcements' );
602 }
603 register_deactivation_hook( __FILE__, 'autowp_announcements_deactivation' );
604
605 // Zamanlanmış olayları (interval) ekle
606 function autowp_custom_intervals( $schedules ) {
607 $schedules['ten_minutes'] = array(
608 'interval' => 600, // 600 saniye = 10 dakika
609 'display' => __( 'Every 10 Minutes' ),
610 );
611 return $schedules;
612 }
613 add_filter( 'cron_schedules', 'autowp_custom_intervals' );
614
615 // API'den duyuruları çekme fonksiyonu
616 function autowp_fetch_announcements() {
617 // autowp_settings opsiyonunu al ve çöz
618 $settings_option = get_option( 'autowp_settings' );
619
620 if ( empty( $settings_option ) ) {
621 return; // Ayar yoksa işlemi durdur
622 }
623
624 // Ayarlardan api_key değerini al
625 $settings = maybe_unserialize( $settings_option );
626 $api_key = isset( $settings['api_key'] ) ? $settings['api_key'] : '';
627
628 $api_url = 'https://api.autowp.app/announcements';
629
630 // API isteğini api_key varsa ona göre yapılandır
631 $request_url = ! empty( $api_key ) ? add_query_arg( 'api_key', $api_key, $api_url ) : $api_url;
632
633 // API'ye istek yap
634 $response = wp_remote_get( $request_url, array(
635 'timeout' => 15,
636 'sslverify' => false,
637 'headers' => array(
638 'Content-Type' => 'application/json',
639 'Accept' => 'application/json',
640 )
641 ) );
642
643 if ( is_wp_error( $response ) ) {
644 return; // Hata varsa işlemi durdur
645 }
646
647 $body = wp_remote_retrieve_body( $response );
648 $announcements = json_decode( $body, true );
649
650 if ( is_array( $announcements ) ) {
651 // Duyuruları WordPress opsiyonuna kaydet
652 update_option( 'autowp_announcements', $announcements );
653 }
654 }
655
656 add_action( 'autowp_fetch_announcements', 'autowp_fetch_announcements' );
657
658 function autowp_get_user_email_from_settings() {
659 // autowp_settings opsiyonunu alın
660 $autowp_settings = get_option('autowp_settings');
661 $autowp_settings = $autowp_settings ? unserialize($autowp_settings) : [];
662
663 // Ayarlardan email'i çek
664 $user_email = isset($autowp_settings['api_email']) ? sanitize_email($autowp_settings['api_email']) : '';
665
666 return $user_email;
667 }
668
669
670 function autowp_wordpress_post(){
671 $wordpress_websites = autowp_get_wp_autowp_wordpress_websites();
672 // Randomize the order of the array
673 shuffle($wordpress_websites);
674 $counter = 0;
675 $max_posts_per_cron = absint(unserialize(get_option('autowp_settings'))['max_posts_per_cron'] ?? 1);
676
677 foreach($wordpress_websites as $wordpress_website){
678
679 if ($counter >= $max_posts_per_cron) {
680 break;
681 }
682
683
684
685
686 $user_domainname = esc_url(get_site_url());
687 $user_email = autowp_get_user_email_from_settings();
688 $website_domainname = sanitize_url($wordpress_website['domain_name']);
689 $website_categories = $wordpress_website['website_category_id'];
690 $wordpress_categories = $wordpress_website['category_id'];
691
692
693 $post_count = $wordpress_website['post_count'];
694 $post_order = $wordpress_website['post_order'];
695
696 $title_prompt = $wordpress_website['title_prompt'];
697 $content_prompt = $wordpress_website['content_prompt'];
698 $tags_prompt = $wordpress_website['tags_prompt'];
699 $image_prompt = $wordpress_website['image_prompt'];
700
701 $aigenerated_title = 1;
702 $aigenerated_content = 1;
703 $aigenerated_tags = 1;
704 $aigenerated_image = 1;
705
706 $source_type = $wordpress_website['website_type'];
707
708 $image_generating_status = $wordpress_website['image_generating_status'];
709
710 $author_selection = $wordpress_website['author_selection'];
711
712 //News
713
714 $news_keyword = $wordpress_website['news_keyword'];
715 $news_country = $wordpress_website['news_country'];
716 $news_language = $wordpress_website['news_language'];
717 $news_time_published = $wordpress_website['news_time_published'];
718 $is_html = true;
719
720
721
722
723 $image_settings = unserialize(get_option('autowp_settings'));
724 $image_settings_json = [];
725
726 if(!empty($image_settings)){
727 $image_settings_json = json_encode($image_settings);
728 }
729
730 $prompts_option = get_option('autowp_rewriting_promptscheme');
731 $prompt_option_str = strval($prompts_option);
732 $rewriting_prompt_scheme = [];
733
734 if (!empty($prompts_option)) {
735 $rewriting_prompt_scheme = json_encode($prompts_option);
736
737 // JSON'dan diziye dönüşüm yapılıyor ve true ile birlikte kullanıldığı için asosiyatif dizi elde ediliyor
738 }
739
740
741
742
743
744
745 $get_data_from_api = autowp_get_posts_from_wp_website($user_domainname, $user_email, $website_domainname, $website_categories, $post_count,$post_order,'',$title_prompt,$content_prompt,$tags_prompt,$image_prompt,$aigenerated_title,$aigenerated_content,$aigenerated_tags,$aigenerated_image,$image_settings_json,$source_type,$image_generating_status,$news_keyword,$news_country,$news_language,$news_time_published,$is_html,$prompt_option_str);
746 sleep(rand(2, 3)); // 2-3 saniye bekleme süresi eklendi
747 $wp_posts = $get_data_from_api['autowp-api'];
748
749 if($get_data_from_api['error']){
750 update_option('autowp_alerts', $get_data_from_api['error']);
751 continue;
752 }else{
753 update_option('autowp_alerts', '');
754 }
755
756
757
758
759
760 foreach($wp_posts as $post){
761 $post_title = $post['post_title'];
762 $post_content = $post['content'];
763 $post_featured_image = $post['preview_image_original'];
764 $post_tags = $post['tags'];
765 $post_status = $image_settings['post_status'] ?? 'publish';
766 $post_author = $author_selection;
767 $post_type = 'post';
768 $focus_keyword = $post['focus_keyword'];
769 $faq_schema = $post['faq_schema'];
770
771
772
773
774 $new_post_id = autowp_set_new_post($post_title,$post_content,$post_status,$post_author,$post_type,$post_featured_image, autowp_stringToArray($wordpress_categories),$post_tags,$focus_keyword,$faq_schema);
775 $counter++;
776
777
778 }
779
780
781
782
783
784 }
785 }
786
787 function autowp_get_posts_from_wp_website($user_domainname, $user_email, $website_domainname, $website_categories, $post_count,$post_order,$post_ids,$title_prompt,$content_prompt,$tags_prompt,$image_prompt,$aigenerated_title,$aigenerated_content,$aigenerated_tags,$aigenerated_image,$image_settings,$source_type,$image_generating_status,$news_keyword = '',$news_country = '',$news_language = '',$news_time_published = '',$is_html = false,$rewriting_prompt_scheme = null) {
788
789
790 $prompts_option = get_option('autowp_rewriting_promptscheme');
791
792 if (!is_array($prompts_option)) {
793 $prompts_option = json_decode($prompts_option, true);
794 }
795
796 $prompt_option_string = json_encode($prompts_option);
797
798
799 $url = 'https://api.autowp.app/latest-posts';
800
801 $data = array(
802 'user_domainname' => $user_domainname,
803 'user_email' => $user_email,
804 'website_domainname' => $website_domainname,
805 'website_categories' => $website_categories,
806 'post_count' => 5,
807 'post_order' => $post_order,
808 'published_post_ids' => $post_ids,
809
810 'title_prompt' => $title_prompt,
811 'content_prompt' => $content_prompt,
812 'tags_prompt' => $tags_prompt,
813 'image_prompt' => $image_prompt,
814
815
816 'aigenerated_title' => $aigenerated_title,
817 'aigenerated_content' => $aigenerated_content,
818 'aigenerated_tags' => $aigenerated_tags,
819 'aigenerated_image' => $aigenerated_image,
820
821
822 'image_settings' => $image_settings,
823
824
825 'source_type' => $source_type,
826
827 'image_generating_status' => $image_generating_status,
828
829 'news_keyword' => $news_keyword,
830 'news_country' => $news_country,
831 'news_language' => $news_language,
832 'news_time_published' => $news_time_published,
833 'is_html' => $is_html,
834
835 'rewriting_prompt_scheme' => $prompt_option_string
836 );
837
838
839
840 $response = wp_remote_post($url, array(
841
842 'timeout' => 2400, // Timeout set to 4 minutes.
843
844 'body' => $data,
845
846 ));
847
848 update_option('autowp_alerts', strval($response));
849
850 if (is_wp_error($response)) {
851 $error_message = wp_remote_retrieve_response_message($response);
852 return 'Error: ' . $error_message;
853 }
854
855
856 $body = wp_remote_retrieve_body($response);
857
858
859 $result = json_decode($body, true);
860
861
862
863 return $result;
864 }
865
866
867 function autowp_set_wpcron(){
868 // Current settings
869 $current_settings = unserialize(get_option('autowp_settings'));
870
871 // Received data from user
872 $received_data = array(
873 "selected_time_type" => '1',
874 "wpcron_status" => '1',
875 "watermark_link" => '',
876 "image_modification_status" => '0',
877 "image_generating_status" => '0',
878 "ai_image_width" => 0,
879 "ai_image_height" => 0,
880 "stable_diffusion_style" => 'None',
881 // New settings for flux, stable diffusion size, DALL-E 2, DALL-E 3 sizes
882 "flux_image_size" => 'landscape_16_9', // Default value for flux image size
883 "stable_diffusion_size" => '16:9', // Default value for stable diffusion size
884 "dalle_2_size" => '1024x1024', // Default value for DALL-E 2 size
885 "dalle_3_size" => '1024x1024', // Default value for DALL-E 3 size
886 "dalle_3_style" => 'natural',
887 "image_format" => "png",
888 // New default values
889 "max_posts_per_cron" => 1, // Default value for maximum posts per cron
890 "max_posts_per_day" => 20, // Default value for maximum posts per day
891 "spam_ad_filter" => '0', // Default value for spam and ad filter (passive)
892 "duplicate_content_filter" => '1', // Default value for duplicate content filter (active)
893 "primary_llm" => 'openai',
894 "secondary_llm" => 'xai',
895 "default_image_url" => "https://gorsel.autowp.app/en/en/1.png"
896
897 );
898
899 if(empty($current_settings)){
900
901 // Serialize and update options
902 update_option('autowp_settings', serialize($received_data), "yes");
903
904 }
905
906 $time_value_type = sanitize_text_field('2');
907
908 $user_wpcron_time = autowp_get_wpcron_time($time_value_type);
909
910
911 // Schedule WP-Cron
912 if (!wp_next_scheduled('autowp_cron')) {
913 wp_schedule_event(time(), $user_wpcron_time, 'autowp_cron');
914 } else {
915 wp_clear_scheduled_hook('autowp_cron');
916 wp_schedule_event(time(), $user_wpcron_time, 'autowp_cron');
917 }
918 }
919
920
921 function update_autowp_promptscheme_option() {
922 // Define the data as an array
923 $data = [
924 [
925 'name' => 'AutoWP Introduction',
926 'detailed_prompt' => 'autowp-introduction',
927 'max_tokens' => 300000,
928 ],
929 [
930 'name' => 'AutoWP Subheadings',
931 'detailed_prompt' => 'autowp-subheadings',
932 'max_tokens' => 300000,
933 ],
934 [
935 'name' => 'AutoWP FAQ',
936 'detailed_prompt' => 'autowp-faq',
937 'max_tokens' => 300000,
938 ],
939 [
940 'name' => 'AutoWP Results',
941 'detailed_prompt' => 'autowp-result',
942 'max_tokens' => 300000,
943 ],
944 ];
945
946 // Serialize the array
947 $serialized_data = serialize($data);
948
949 // Check if the option is empty before updating
950 if (empty(get_option('autowp_rewriting_promptscheme'))) {
951 update_option('autowp_rewriting_promptscheme', $serialized_data);
952 }
953 }
954
955 register_activation_hook(__FILE__, 'update_autowp_promptscheme_option');
956
957
958
959
960
961
962 register_activation_hook(__FILE__, 'autowp_set_wpcron');
963
964 function autowp_unset_wpcron(){
965
966 // find out when the last event was scheduled
967 $timestamp = wp_next_scheduled ('autowp_cron');
968 // unschedule previous event if any
969 wp_unschedule_event ($timestamp, 'autowp_cron');
970
971 }
972
973 register_deactivation_hook(__FILE__,'autowp_unset_wpcron');
974
975 //WP-CRON END
976
977 // Dil desteği için 'autowp' önekini kullanarak metinleri çevirelim
978
979
980
981 function autowp_get_user_from_autowp_api() {
982 // API URL'si
983 $url = 'https://api.autowp.app/getUserByDomain';
984
985 // Setup kısmında kaydedilen ayarları al
986 $autowp_settings = get_option('autowp_settings');
987 $autowp_settings = $autowp_settings ? unserialize($autowp_settings) : [];
988
989 // autowp_settings içinden user_email ve api_key'i al
990 $user_email = isset($autowp_settings['api_email']) ? sanitize_email($autowp_settings['api_email']) : 'email@example.com';
991 $api_key = isset($autowp_settings['api_key']) ? sanitize_text_field($autowp_settings['api_key']) : '';
992
993 // API'ye gönderilecek veriler
994 $args = array(
995 'body' => array(
996 'user_domainname' => esc_url(get_site_url()),
997 'user_email' => $user_email,
998 'api_key' => $api_key
999 )
1000 );
1001
1002 // API çağrısı
1003 $response = wp_remote_post($url, $args);
1004
1005 // Yanıtı JSON olarak ayrıştır
1006 $json = json_decode(wp_remote_retrieve_body($response), true);
1007
1008 return $json;
1009 }
1010
1011 function autowp_generalSettings(){
1012 ?>
1013
1014 <!-- Logo Eklemesi -->
1015
1016 <form method="post" class="form-horizontal">
1017 <fieldset>
1018
1019 <?php
1020 $user = autowp_get_user_from_autowp_api();
1021 $isUserPremium = $user['product_name'] ?? 'Free Users';
1022
1023 // Eğer kullanıcının AIContentGenerator kredisi ve premium üyeliği yoksa
1024 if ($isUserPremium == 'Free User') {
1025 echo '<div class="alert alert-warning" role="alert">' .
1026 esc_html__('You are not a premium user so you have limited balance. If you want to generate more posts or image, you should upgrade to premium membership.','autowp') . ' ' .
1027 '</div>';
1028 }
1029 ?>
1030
1031 <div class="form-group">
1032 <div class="card text-center">
1033 <div class="card-body">
1034 <h4 class="card-title"><img src="<?php echo esc_url(plugins_url( '/assets/images/logo128.png', __FILE__ )) ?>" alt="AutoWP" style="height: 100px; width: 100px;"></h4>
1035 <p class="card-text"> <?php echo esc_html__('User Type:', 'autowp'); ?> <?php echo esc_html($isUserPremium); ?></p>
1036 <p class="card-text"> <?php echo esc_html__('Renewal Date:', 'autowp'); ?> <?php echo esc_html($user['renewal_date'] ?? esc_html__('Free User', 'autowp')); ?></p>
1037 <p class="card-text"> <?php echo esc_html__('Total Post Balance:', 'autowp'); ?> <?php echo esc_html($user['total_post_balance']) . ' ' . esc_html__('Posts', 'autowp'); ?></p>
1038 <p class="card-text"> <?php echo esc_html__('AI-Generated Post Balance:', 'autowp'); ?> <?php echo esc_html($user['aigenerated_post_balance']) . ' ' . esc_html__('Posts', 'autowp'); ?></p>
1039 <p class="card-text"> <?php echo esc_html__('AI-Generated Image Balance:', 'autowp'); ?> <?php echo esc_html($user['aigenerated_image_balance']) . ' ' . esc_html__('Images', 'autowp'); ?></p>
1040 <br>
1041 <a href="https://api.whatsapp.com/send/?phone=447384097397" class="btn btn-primary"><?php echo esc_html__('Contact Us', 'autowp'); ?></a>
1042 </div>
1043 </div>
1044 </div>
1045
1046
1047
1048 <br>
1049
1050
1051 <!-- Yeni Card: "R10 Özel Fiyatlar için Tıklayın!" -->
1052
1053
1054
1055 <?php
1056
1057 $request_url = 'https://api.autowp.app/getPackages';
1058
1059 if ( get_locale() === 'tr_TR' ) {
1060 $request_url = 'https://api.autowp.app/getPackages?is_turkish=True';
1061 }
1062 $response = wp_remote_get($request_url);
1063
1064
1065
1066
1067
1068 if (is_wp_error($response)) {
1069 echo '<div class="alert alert-danger" role="alert">' .
1070 esc_html__('An error occurred while fetching packages. Please try again later.', 'autowp') . ' ' .
1071 '</div>';
1072 } else {
1073 $packages = json_decode(wp_remote_retrieve_body($response), true);
1074
1075 // Unlimited paketleri önce sıralamak için düzenleme
1076 usort($packages, function($a, $b) {
1077 return ($b['is_unlimited'] ?? false) - ($a['is_unlimited'] ?? false);
1078 });
1079
1080 $hasAnnual = false;
1081 $hasMonthly = false;
1082
1083 foreach ($packages as $package) {
1084 if ($package['is_annual']) {
1085 $hasAnnual = true;
1086 } else {
1087 $hasMonthly = true;
1088 }
1089 }
1090
1091
1092
1093 if ($hasMonthly && $hasAnnual) {
1094 echo '<center><div class="btn-group" role="group" aria-label="Package Options">';
1095
1096 if ($hasMonthly) {
1097 echo '<button type="button" class="btn btn-primary active" id="monthly-tab" onclick="filterPackages(\'monthly\')">' . esc_html__('Monthly', 'autowp') . '</button>';
1098 }
1099
1100 if ($hasAnnual) {
1101 echo '<button type="button" class="btn btn-secondary" id="annual-tab" onclick="filterPackages(\'annual\')">' . esc_html__('Annual', 'autowp') . '</button>';
1102 }
1103
1104 echo '</div><center>';
1105 }
1106
1107 if ( get_locale() === 'tr_TR' ) {
1108 echo '<div class="card text-center" style="width: 100%; margin-bottom: 20px;">
1109 <div class="card-body">
1110 <h4 class="card-title" style="font-weight: bold; color: #FF6347;">' . esc_html__('R10 Üyelerine Özel %400 İndirimli Fiyatlar için Tıklayın!', 'autowp') . '</h4>
1111 <a href="https://api.whatsapp.com/send/?phone=447384097397" class="btn btn-warning">' . esc_html__('Tıklayın', 'autowp') . '</a>
1112 </div>
1113 </div>';
1114 }
1115
1116
1117 echo '<div id="packagesContainer">';
1118
1119 if (!empty($packages)) {
1120 foreach ($packages as $package) {
1121 $isUnlimited = !empty($package['is_unlimited']) && $package['is_unlimited'];
1122 $isAnnualClass = $package['is_annual'] ? 'annual' : 'monthly';
1123
1124 $currency = '£';
1125
1126 if ( get_locale() === 'tr_TR' ) {
1127 $currency = 'TL';
1128 }
1129
1130 if ($isUnlimited) {
1131 ?>
1132 <div class="columns package unlimited <?php echo esc_attr($isAnnualClass); ?>">
1133 <ul class="price special-unlimited">
1134 <li class="header" style="background-color: #FFD700; color: #000;"><?php echo esc_html(ucwords($package['name'])); ?></li>
1135 <li class="grey">
1136 <?php echo esc_html($currency); ?>
1137 <?php echo esc_html(number_format($package['package_price'], 2)); ?> /
1138 <?php echo $package['is_annual'] ? esc_html__('Year', 'autowp') : esc_html__('Month', 'autowp'); ?>
1139 </li>
1140
1141 <li><?php echo esc_html__('Unlimited AI-Generated Posts', 'autowp'); ?></li>
1142 <li><?php echo esc_html__('Unlimited AI-Generated Images', 'autowp'); ?></li>
1143 <li>
1144 <?php
1145 echo $package['max_website'] == 0
1146 ? esc_html__('Unlimited Websites', 'autowp')
1147 : esc_html($package['max_website']) . ' ' . esc_html__('max website', 'autowp');
1148 ?>
1149 </li>
1150
1151 <li><?php echo esc_html__('Auto Indexing', 'autowp'); ?></li>
1152 <li><?php echo esc_html__('Social Media Sharing', 'autowp'); ?></li>
1153 <li><?php echo esc_html__('Auto Image Editing', 'autowp'); ?></li>
1154 <li><?php echo esc_html__('Use Your Own API Keys', 'autowp'); ?></li>
1155 <li class="grey"><a href="https://api.autowp.app/v2/subscribe?package_id=<?php echo esc_attr($package['id']); ?>&user_id=<?php echo esc_attr($user['user_id']); ?>" class="button"><?php echo esc_html__('Sign Up', 'autowp'); ?></a></li>
1156 </ul>
1157 </div>
1158 <?php
1159 }
1160 else {
1161 ?>
1162 <div class="columns package <?php echo esc_attr($isAnnualClass); ?>" style="<?php echo $package['is_annual'] ? 'display: none;' : ''; ?>">
1163 <ul class="price">
1164 <li class="header"><?php echo esc_html(ucwords($package['name'])); ?></li>
1165 <li class="grey">
1166 <?php echo esc_html($currency); ?>
1167 <?php echo esc_html(number_format($package['package_price'], 2)); ?> /
1168 <?php echo $package['is_annual'] ? esc_html__('Year', 'autowp') : esc_html__('Month', 'autowp'); ?>
1169 </li>
1170
1171 <li><?php echo esc_html($package['max_ai_generated_post_per_month']) . ' ' . esc_html__('AI-Generated Post per Month', 'autowp'); ?></li>
1172 <li><?php echo esc_html($package['max_ai_generated_image_per_month']) . ' ' . esc_html__('AI-Generated Image per Month', 'autowp'); ?></li>
1173 <li><?php echo esc_html__('Unlimited Websites', 'autowp'); ?></li>
1174 <li><?php echo esc_html__('Auto Indexing', 'autowp'); ?></li>
1175 <li><?php echo esc_html__('Social Media Sharing', 'autowp'); ?></li>
1176 <li><?php echo esc_html__('Auto Image Editing', 'autowp'); ?></li>
1177 <li class="grey"><a href="https://api.autowp.app/v2/subscribe?package_id=<?php echo esc_attr($package['id']); ?>&user_id=<?php echo esc_attr($user['user_id']); ?>" class="button"><?php echo esc_html__('Sign Up', 'autowp'); ?></a></li>
1178 </ul>
1179 </div>
1180 <?php
1181 }
1182 }
1183
1184 } else {
1185 echo '<div class="alert alert-info" role="alert">' .
1186 esc_html__('No packages available at the moment. Please check back later.', 'autowp') . ' ' .
1187 '</div>';
1188 }
1189
1190 echo '</div>';
1191 }
1192 ?>
1193
1194 </form>
1195
1196
1197 <?php
1198 }
1199
1200
1201
1202
1203 // Loading WP_List_Table class file
1204 // We need to load it as it's not automatically loaded by WordPress
1205 if (!class_exists('WP_List_Table')) {
1206 require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php');
1207 }
1208
1209
1210 function autowp_create_table_or_update() {
1211 global $wpdb;
1212 $table_name = $wpdb->prefix . 'autowp_wordpress_websites';
1213
1214 // Eğer tablo oluşturulmuşsa, mevcut sütunları kontrol edin:
1215 if($wpdb->get_var("SHOW COLUMNS FROM `$table_name` LIKE 'active'") != 'active') {
1216 // "active" sütununu ekle (varsayılan 1: aktif)
1217 $wpdb->query("ALTER TABLE $table_name ADD COLUMN active TINYINT(1) NOT NULL DEFAULT 1");
1218 }
1219 }
1220 register_activation_hook(__FILE__, 'autowp_create_table_or_update');
1221
1222
1223
1224 function autowp_create_table() {
1225 global $wpdb;
1226 $table_name = $wpdb->prefix . 'autowp_wordpress_websites';
1227
1228 // Check if the table already exists
1229 $prepared_query = $wpdb->prepare("SHOW TABLES LIKE %s", $table_name);
1230 if ($wpdb->get_var($prepared_query) === $table_name) {
1231 return;
1232 }
1233
1234
1235 $charset_collate = $wpdb->get_charset_collate();
1236
1237 // Define the table structure
1238 $sql = "CREATE TABLE $table_name (
1239 `id` int(11) NOT NULL AUTO_INCREMENT,
1240 `website_name` varchar(255) NOT NULL,
1241 `website_type` text NOT NULL,
1242 `domain_name` varchar(255) NOT NULL,
1243 `category_id` text NOT NULL,
1244 `website_category_id` text NOT NULL,
1245 `aigenerated_title` text NOT NULL,
1246 `aigenerated_content` text NOT NULL,
1247 `aigenerated_tags` text NOT NULL,
1248 `aigenerated_image` text NOT NULL,
1249 `post_count` text NOT NULL,
1250 `post_order` text NOT NULL,
1251 `title_prompt` text NOT NULL,
1252 `content_prompt` text NOT NULL,
1253 `tags_prompt` text NOT NULL,
1254 `image_prompt` text NOT NULL,
1255 `image_generating_status` text NOT NULL,
1256 `author_selection` text NOT NULL,
1257
1258
1259 `news_time_published` text NOT NULL,
1260 `news_language` text NOT NULL,
1261 `news_country` text NOT NULL,
1262 `news_keyword` text NOT NULL,
1263
1264 PRIMARY KEY (`id`)
1265 );";
1266
1267
1268 // Include the necessary file for dbDelta()
1269 require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
1270
1271 // Create the table
1272 dbDelta($sql);
1273 }
1274 register_activation_hook(__FILE__, 'autowp_create_table');
1275
1276
1277
1278 // Plugin menu callback function
1279 function autowp_automaticPost()
1280 {
1281 // Creating an instance
1282 $table = new AutoWP_Wordpress_Websites();
1283
1284 echo '<div class="wrap"><h2>SupportHost Admin Table</h2>';
1285 echo '<form method="post">';
1286
1287 // Add nonce field
1288 wp_nonce_field('autowp_websites_menu_nonce', '_wpnonce');
1289 // Prepare table
1290 $table->prepare_items();
1291 // Search form
1292 $table->search_box('search', 'search_id');
1293 // Display table
1294 $table->display();
1295 echo '</div></form>';
1296 }
1297
1298
1299 // Extending class
1300 class AutoWP_Wordpress_Websites extends WP_List_Table
1301 {
1302 // Here we will add our code
1303
1304 // Define table columns
1305 function get_columns()
1306 {
1307 $columns = array(
1308 'toggle' => '', // Yeni "toggle" sütunu (en sol sütun olarak kullanılacak)
1309 'cb' => '<input type="checkbox" />',
1310 'website_type' => __('Website Type', 'autowp'),
1311 'website_name' => __('Website Name', 'autowp'),
1312 'domain_name' => __('Domain Name', 'autowp'),
1313 'category_id' => __('Your Categories', 'autowp'),
1314 'website_category_id' => __('Website Categories', 'autowp'),
1315
1316 );
1317 return $columns;
1318 }
1319
1320
1321 // define $table_data property
1322 private $table_data;
1323
1324 // Bind table with columns, data and all
1325 function prepare_items()
1326 {
1327 //data
1328 if ( isset( $_POST['s'] ) && isset( $_POST['_wpnonce'] ) && wp_verify_nonce( sanitize_text_field(wp_unslash($_POST['_wpnonce'])), 'autowp_websites_menu_nonce' ) ) {
1329 $search_query = sanitize_text_field($_POST['s']);
1330 $this->table_data = $this->get_table_data($search_query);
1331 } else {
1332 $this->table_data = $this->get_table_data();
1333 }
1334
1335
1336 $columns = $this->get_columns();
1337 $hidden = ( is_array(get_user_meta( get_current_user_id(), 'managetoplevel_page_list_tablecolumnshidden', true)) ) ? get_user_meta( get_current_user_id(), 'managetoplevel_page_list_tablecolumnshidden', true) : array();
1338 $sortable = $this->get_sortable_columns();
1339 $primary = 'name';
1340 $this->_column_headers = array($columns, $hidden, $sortable, $primary);
1341 $this->process_bulk_action();
1342 $this->table_data = $this->get_table_data();
1343
1344 usort($this->table_data, array($this, 'usort_reorder'));
1345
1346 /* pagination */
1347 $per_page = $this->get_items_per_page('elements_per_page', 10);
1348 $current_page = $this->get_pagenum();
1349 $total_items = count($this->table_data);
1350
1351 $this->table_data = array_slice($this->table_data, (($current_page - 1) * $per_page), $per_page);
1352
1353 $this->set_pagination_args(array(
1354 'total_items' => $total_items, // total number of items
1355 'per_page' => $per_page, // items to show on a page
1356 'total_pages' => ceil( $total_items / $per_page ) // use ceil to round up
1357 ));
1358
1359 $this->items = $this->table_data;
1360 }
1361
1362
1363
1364 function column_website_type($item) {
1365 // Website type bilgisini alıyoruz.
1366 $type = $item['website_type'];
1367
1368 // Her website type için ikon URL’lerini tanımlayan dizi:
1369 $icons = array(
1370 'wordpress' => plugins_url('assets/images/wordpress-icon.png', __FILE__),
1371 'rss' => plugins_url('assets/images/rss-icon.png', __FILE__),
1372 'ai' => plugins_url('assets/images/robot-icon.png', __FILE__),
1373 'news' => plugins_url('assets/images/gnews.png', __FILE__),
1374 'agenticscraper' => plugins_url('assets/images/robot-icon.png', __FILE__),
1375 );
1376
1377 // İlgili type için ikon URL'si; yoksa varsayılan ikon:
1378 $icon_url = isset($icons[$type]) ? $icons[$type] : plugins_url('assets/images/default-icon.png', __FILE__);
1379
1380 // Orijinal fonksiyonda website type'a göre edit sayfa slug'ı alınıyordu:
1381 $website_page = autowp_get_page_slug_from_website_type($type);
1382
1383 // Edit ve Delete linklerini oluşturuyoruz. URL'leri oluşturmak için admin_url() kullanıyoruz:
1384 $actions = array(
1385 'edit' => sprintf(
1386 '<a href="%s?page=%s&id=%s">%s</a>',
1387 admin_url('admin.php'),
1388 $website_page,
1389 $item['id'],
1390 __('Edit', 'autowp')
1391 ),
1392 'delete' => sprintf(
1393 '<a href="%s?page=%s&action=delete&id=%s">%s</a>',
1394 admin_url('admin.php'),
1395 sanitize_text_field($_REQUEST['page']),
1396 $item['id'],
1397 __('Delete', 'autowp')
1398 ),
1399 );
1400
1401 // İkonu ve row_actions linklerini birlikte döndürün:
1402 return '<img src="' . esc_url($icon_url) . '" alt="' . esc_attr($type) . '" style="width:40px; height:40px;"> ' . $this->row_actions($actions);
1403 }
1404
1405
1406 function column_toggle($item) {
1407 $id = $item['id'];
1408 // Eğer veritabanında "active" sütunu varsa, o değeri kullanın; yoksa varsayılan olarak 1 (aktif) kabul edin.
1409 $active = isset($item['active']) ? intval($item['active']) : 1;
1410 $button_text = $active ? __('Stop', 'autowp') : __('Start', 'autowp');
1411 // Butonun renk sınıfını aktiflik durumuna göre ayarlayın: aktifse kırmızı (durdurmak için), pasifse yeşil (başlatmak için)
1412 $button_class = $active ? 'btn btn-danger btn-sm' : 'btn btn-success btn-sm';
1413 return '<button data-id="' . esc_attr($id) . '" class="toggle-status ' . esc_attr($button_class) . '">' . esc_html($button_text) . '</button>';
1414 }
1415
1416
1417
1418
1419 // To show bulk action dropdown
1420 function get_bulk_actions()
1421 {
1422 $actions = array(
1423 'delete_all' => __('Delete', 'autowp'),
1424
1425 );
1426 return $actions;
1427 }
1428
1429 function process_bulk_action()
1430 {
1431 global $wpdb;
1432
1433 $table = $wpdb->prefix . 'autowp_wordpress_websites';
1434
1435 if ('delete_all' === $this->current_action() || ('delete' === $this->current_action() && isset($_REQUEST['id']))) {
1436 $request_id = isset($_REQUEST['id']) ? array_map('absint', (array) $_REQUEST['id']) : array();
1437
1438 if (!empty($request_id)) {
1439 // Prepare the DELETE query with proper escaping
1440 $placeholders = implode(',', array_fill(0, count($request_id), '%d'));
1441 $query = $wpdb->prepare("DELETE FROM $table WHERE id IN($placeholders)", $request_id);
1442
1443 // Execute the query
1444 $wpdb->query($query);
1445 }
1446 }
1447 }
1448
1449
1450
1451 // Get table data
1452 private function get_table_data( $search = '' ) {
1453 global $wpdb;
1454
1455 $table = $wpdb->prefix."autowp_wordpress_websites";
1456
1457
1458 if ( ! empty( $search ) ) {
1459 $prepared_search = $wpdb->esc_like( $search );
1460 $prepared_search = '%' . $wpdb->esc_like( $search ) . '%';
1461
1462 return $wpdb->get_results(
1463 $wpdb->prepare(
1464 "SELECT * FROM {$table} WHERE website_name LIKE %s OR domain_name LIKE %s OR category_id LIKE %s",
1465 $prepared_search,
1466 $prepared_search,
1467 $prepared_search
1468 ),
1469 ARRAY_A
1470 );
1471 } else {
1472
1473 return $wpdb->get_results(
1474 $wpdb->prepare(
1475 "SELECT * FROM {$table}",
1476 $table
1477 ),
1478 ARRAY_A
1479 );
1480
1481 }
1482 }
1483
1484 function column_default($item, $column_name)
1485 {
1486
1487
1488 switch ($column_name) {
1489 case 'id':
1490 case 'website_type':
1491 case 'website_name':
1492 case 'domain_name':
1493 case 'category_id':
1494 case 'website_category_id':
1495 default:
1496 return $item[$column_name];
1497 }
1498 }
1499
1500 function column_cb($item){
1501 return sprintf(
1502 '<input type="checkbox" name="id[]" value="%s" />',
1503 $item['id']
1504 );
1505 }
1506
1507 protected function get_sortable_columns(){
1508 $sortable_columns = array(
1509 'website_name' => array('website_name', false),
1510 'domain_name' => array('website_name', false),
1511 'id' => array('id', true)
1512 );
1513 return $sortable_columns;
1514 }
1515
1516 // Sorting function
1517 function usort_reorder($a, $b)
1518 {
1519 // If no sort, default to user_login
1520 $sanitized_orderby = sanitize_text_field($_GET['orderby']);
1521 $orderby = (!empty($sanitized_orderby)) ? $sanitized_orderby : 'website_name';
1522
1523 // If no order, default to asc
1524 $sanitized_get_id = sanitize_text_field($_GET['id']);
1525 $order = (!empty($sanitized_get_id)) ? $sanitized_get_id : 'asc';
1526
1527 // Determine sort order
1528 $result = strcmp($a[$orderby], $b[$orderby]);
1529
1530 // Send final sort direction to usort
1531 return ($order === 'asc') ? $result : -$result;
1532 }
1533
1534
1535
1536
1537 }
1538
1539 // add screen options
1540 function autowp_wordpress_websites_options() {
1541
1542 global $autowp_wordpress_website_list_page;
1543 global $table;
1544
1545 $screen = get_current_screen();
1546
1547 // get out of here if we are not on our settings page
1548 if(!is_object($screen) || $screen->id != $autowp_wordpress_website_list_page)
1549 return;
1550
1551 $args = array(
1552 'label' => __('Elements per page', 'autowp'),
1553 'default' => 2,
1554 'option' => 'elements_per_page'
1555 );
1556 add_screen_option( 'per_page', $args );
1557
1558 $table = new AutoWP_Wordpress_Websites();
1559
1560 }
1561
1562 function autowp_isValidDomain($domain) {
1563 // WordPress wp_http_validate_url fonksiyonunu kullanarak URL'yi doğrula
1564 $valid_url = wp_http_validate_url( $domain);
1565
1566 // Eğer geçerli bir URL dönerse, alan adı geçerlidir
1567 if (!is_wp_error($valid_url)) {
1568 return true;
1569 } else {
1570 return false;
1571 }
1572 }
1573
1574
1575 function autowp_is_site_working($site_url, $site_type) {
1576 $api_url = 'https://api.autowp.app/check_website'; // Flask API URL
1577
1578 // JSON formatında veriyi hazırlayın
1579 $body = json_encode([
1580 'site_url' => $site_url,
1581 'site_type' => $site_type,
1582 ]);
1583
1584 // WordPress'in HTTP API'si ile POST isteği gönderin
1585 $response = wp_remote_post($api_url, [
1586 'body' => $body,
1587 'headers' => [
1588 'Content-Type' => 'application/json',
1589 ],
1590 'timeout' => 5,
1591 ]);
1592
1593 // Eğer yanıt bir hata dönerse veya geçerli değilse false döner
1594 if (is_wp_error($response)) {
1595 return false;
1596 }
1597
1598 // Yanıtı alın ve JSON olarak çözümleyin
1599 $body = wp_remote_retrieve_body($response);
1600 $data = json_decode($body, true);
1601
1602 // Yanıtta 'valid' değeri varsa onu döndürün, aksi halde false döner
1603 return isset($data['valid']) ? $data['valid'] : false;
1604 }
1605
1606
1607 function autowp_validate_agenticscraper( $item, $is_manual = false ) {
1608 $messages = array();
1609
1610 // AgenticScraper için "content_prompt" (long description) zorunludur.
1611 if ( empty( $item['content_prompt'] ) ) {
1612 $messages[] = __( 'Long Description prompt is required for Agentic Scraper.', 'autowp' );
1613 }
1614
1615 // --- Custom Tools Doğrulamaları ---
1616
1617 // Website Tools: Eğer alan etkinse ve URL girilmişse, geçerli URL formatında olmalıdır.
1618 if ( ! empty( $item['enable_website_tools'] ) ) {
1619 if ( ! empty( $item['website_tools_knowledge_base_url'] ) ) {
1620 $url = esc_url_raw( trim( $item['website_tools_knowledge_base_url'] ) );
1621 if ( false === wp_http_validate_url( $url ) ) {
1622 $messages[] = __( 'Website Tools Knowledge Base URL is invalid.', 'autowp' );
1623 }
1624 }
1625 }
1626
1627 // DuckDuckGO Search: Eğer etkinse, girilmiş "Fixed Max Results" değeri sayısal olmalıdır.
1628 if ( ! empty( $item['enable_duckduckgo'] ) ) {
1629 if ( ! empty( $item['duckduckgo_fixed_max_results'] ) && ! is_numeric( $item['duckduckgo_fixed_max_results'] ) ) {
1630 $messages[] = __( 'Fixed Max Results for DuckDuckGO must be a number.', 'autowp' );
1631 }
1632 }
1633
1634 // Wikipedia: Aktifse, konu listesi girilmişse ek doğrulama gerekmez.
1635 // YFinanceTools ve Hacker News: Ek zorunlu doğrulama kuralları bulunmamaktadır.
1636
1637
1638 // --- Knowledge Base Doğrulamaları ---
1639 // PDF Knowledge Base: Eğer etkinse, URL girilmeli ve geçerli bir URL olmalıdır.
1640 if ( ! empty( $item['enable_pdf_kb'] ) ) {
1641 if ( empty( $item['pdf_url_knowledge_base'] ) ) {
1642 $messages[] = __( 'PDF Knowledge Base URL is required when enabled.', 'autowp' );
1643 } else {
1644 $url = esc_url_raw( trim( $item['pdf_url_knowledge_base'] ) );
1645 if ( false === wp_http_validate_url( $url ) ) {
1646 $messages[] = __( 'Invalid PDF Knowledge Base URL.', 'autowp' );
1647 }
1648 }
1649 }
1650
1651 // CSV Knowledge Base: Eğer etkinse, URL girilmeli ve geçerli bir URL olmalıdır.
1652 if ( ! empty( $item['enable_csv_kb'] ) ) {
1653 if ( empty( $item['csv_url_knowledge_base'] ) ) {
1654 $messages[] = __( 'CSV Knowledge Base URL is required when enabled.', 'autowp' );
1655 } else {
1656 $url = esc_url_raw( trim( $item['csv_url_knowledge_base'] ) );
1657 if ( false === wp_http_validate_url( $url ) ) {
1658 $messages[] = __( 'Invalid CSV Knowledge Base URL.', 'autowp' );
1659 }
1660 }
1661 }
1662
1663 // Text Knowledge Base: Eğer etkinse, metin alanı boş olmamalıdır.
1664 if ( ! empty( $item['enable_text_kb'] ) ) {
1665 if ( empty( $item['text_knowledge_base'] ) ) {
1666 $messages[] = __( 'Text Knowledge Base is required when enabled.', 'autowp' );
1667 }
1668 }
1669
1670 // --- Ortak Alanlar ---
1671 // Manuel gönderim değilse, "website_name" zorunludur.
1672 if ( empty( $item['website_name'] ) && ! $is_manual ) {
1673 $messages[] = __( 'Website name is required', 'autowp' );
1674 }
1675 if ( empty( $item['category_id'] ) ) {
1676 $messages[] = __( 'Category is required', 'autowp' );
1677 }
1678
1679 if ( empty( $messages ) ) {
1680 return true;
1681 }
1682 return implode( '<br />', $messages );
1683 }
1684
1685
1686
1687 function autowp_validate_website($item,$is_manual = false)
1688 {
1689 $messages = array();
1690
1691 if($item['website_type'] !== 'ai' && $item['website_type'] !== 'agenticscraper'){
1692
1693
1694
1695 if($item['website_type'] !== 'news'){
1696 if (empty($item['domain_name'])) $messages[] = __('Domain Name is required', 'autowp');
1697
1698
1699
1700 if(!autowp_is_site_working(sanitize_text_field($item['domain_name']), sanitize_text_field($item['website_type']))){
1701 $messages[] = __('Domain name should be valid.', 'autowp');
1702 }
1703
1704 }else{
1705
1706 if (empty($item['news_keyword'])) $messages[] = __('Keyword is required', 'autowp');
1707
1708 }
1709
1710
1711
1712 }else{
1713
1714 if(empty($item['title_prompt']) && empty($item['content_prompt']) && empty($item['tags_prompt']) && empty($item['image_prompt']) ){
1715 $messages[] = __('You should enter at least 1 prompt! ', 'autowp');
1716 }
1717
1718 if(str_contains($item['content_prompt'],'autowp-promptcode') && !autowp_validate_prompt_code($item['content_prompt'] )){
1719 $messages[] = __('invalid prompt code. ', 'autowp');
1720 }
1721
1722 if(str_contains($item['title_prompt'],'autowp-promptcode') || str_contains($item['tags_prompt'],'autowp-promptcode') || str_contains($item['image_prompt'],'autowp-promptcode') ){
1723 $messages[] = __('only content prompt can use prompt codes. ', 'autowp');
1724 }
1725
1726
1727 }
1728
1729 if (empty($item['website_name']) && !$is_manual) $messages[] = __('Website name is required', 'autowp');
1730 if (empty($item['category_id'])) $messages[] = __('Category is required', 'autowp');
1731
1732 if($item['website_type'] === 'news'){
1733
1734 if($item['news_country'] === 'any' && $item['news_language'] !== 'any' ){
1735 $messages[] = __('you should select a country! ', 'autowp');
1736
1737
1738 }
1739
1740 }
1741
1742 if (empty($messages)) return true;
1743 return implode('<br />', $messages);
1744 }
1745
1746
1747 function autowp_validate_prompt_code($input) {
1748 // "autowp-promptcode" yapısını arayın ve içeriğini alın
1749 preg_match('/\[autowp-promptcode\](.*?)\[\/autowp-promptcode\]/s', $input, $matches);
1750
1751 if (empty($matches) || count($matches) < 2) {
1752 // Eğer "autowp-promptcode" yapısı bulunamazsa veya içeriği eksikse false döndürün
1753 return false;
1754 }
1755
1756 $content = $matches[1]; // "autowp-promptcode" içeriğini alın
1757 $fields = explode(',', $content); // Virgülle ayrılmış alanları parçalayın
1758
1759 // Gerekli sayıda alanın olduğunu ve her bir alanın dolu olduğunu kontrol edin
1760 if (count($fields) != 6) {
1761 return false;
1762 }
1763
1764 foreach ($fields as $field) {
1765 if (empty(trim($field))) {
1766 return false;
1767 }
1768 }
1769
1770 return true; // Geçerli ise true döndürün
1771 }
1772
1773
1774 function autowp_get_last_cron_time($cron_name) {
1775 // _get_cron_array fonksiyonunu kullanarak cron görevlerini al
1776 $cron_array = _get_cron_array();
1777
1778 // autowp_cron görevinin en son çalışma zamanını al
1779 $last_execution_time = isset($cron_array[$cron_name]['schedule']) ? $cron_array[$cron_name]['schedule'] : 0;
1780
1781 // Zamanı okunabilir bir formata çevir (isteğe bağlı)
1782 $last_execution_time_readable = date('Y-m-d H:i:s', $last_execution_time);
1783
1784 // En son çalışma zamanını döndür
1785 return $last_execution_time_readable;
1786 }
1787
1788 function autowp_is_cron_executed_recently($cron_name) {
1789 // Cron'un en son çalışma zamanını al
1790 $last_execution_time = autowp_get_last_cron_time($cron_name);
1791
1792 // Şu anki zamanı al
1793 $current_time = time();
1794
1795 // 10 dakika önceki zamanı hesapla
1796 $ten_minutes_ago = $current_time - (10 * 60);
1797
1798 // Eğer en son çalışma zamanı 10 dakika içindeyse true döndür, aksi takdirde false döndür
1799 return $last_execution_time >= $ten_minutes_ago;
1800 }
1801
1802
1803
1804
1805 function autowp_settings_page_set_options() {
1806
1807 if (isset($_POST['_wpnonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['_wpnonce'])), 'autowp_settings_nonce')) {
1808
1809 $time_value_type = sanitize_text_field($_POST["selected_time_type"]);
1810 $user_wpcron_time = autowp_get_wpcron_time($time_value_type);
1811
1812 // API email and API key to be sent to the Flask API for confirmation
1813 $api_email = sanitize_text_field($_POST["api_email"]);
1814 $api_key = sanitize_text_field($_POST["api_key"]);
1815
1816 // API request body
1817 $api_request_body = array(
1818 'body' => json_encode(array(
1819 'user_email' => $api_email,
1820 'api_key' => $api_key,
1821 )),
1822 'headers' => array(
1823 'Content-Type' => 'application/json'
1824 ),
1825 );
1826
1827 // Send a POST request to the Flask API
1828 $api_response = wp_remote_post('https://api.autowp.app/confirm_email', $api_request_body);
1829
1830 // Check for errors in the API response
1831 $save_api_key_email = false;
1832 if (!is_wp_error($api_response)) {
1833 $response_code = wp_remote_retrieve_response_code($api_response);
1834 $response_body = json_decode(wp_remote_retrieve_body($api_response), true);
1835
1836 if ($response_code === 200 && isset($response_body['message']) && $response_body['message'] === 'Successfully confirmed!') {
1837 // If the API confirms successfully, save the API key and email
1838 $save_api_key_email = true;
1839 } else {
1840 // If there's an error in the API response, show the error message
1841 echo '<div class="alert alert-danger" role="alert">' . esc_html__('Error: ' . $response_body['error'], 'autowp') . '</div>';
1842 }
1843 } else {
1844 // If there's a request error
1845 $error_message = $api_response->get_error_message();
1846 echo '<div class="alert alert-danger" role="alert">' . esc_html__('API Request Error: ' . $error_message, 'autowp') . '</div>';
1847 }
1848
1849 $existing_settings_serialized = get_option('autowp_settings');
1850 if ($existing_settings_serialized) {
1851 $existing_settings = unserialize($existing_settings_serialized);
1852 } else {
1853 $existing_settings = array();
1854 }
1855
1856 // Prepare data to save
1857 $received_data = array(
1858 "selected_time_type" => sanitize_text_field($_POST["selected_time_type"]),
1859 "wpcron_status" => sanitize_text_field($_POST['wpcron_status']),
1860 "watermark_link" => sanitize_text_field($_POST['watermark_link']),
1861 "image_modification_status" => sanitize_text_field($_POST['image_modification_status']),
1862 "ai_image_width" => absint($_POST['ai_image_width']),
1863 "ai_image_height" => absint($_POST['ai_image_height']),
1864 "stable_diffusion_style" => sanitize_text_field($_POST['stable_diffusion_style']),
1865 "flux_image_size" => sanitize_text_field($_POST['flux_image_size']),
1866 "stable_diffusion_size" => sanitize_text_field($_POST['stable_diffusion_size']),
1867 "dalle_2_size" => sanitize_text_field($_POST['dalle_2_size']),
1868 "dalle_3_size" => sanitize_text_field($_POST['dalle_3_size']),
1869 "dalle_3_style" => sanitize_text_field($_POST["dalle_3_style"]),
1870 "image_format" => sanitize_text_field($_POST["image_format"]),
1871 "post_status" => sanitize_text_field($_POST['post_status']),
1872 "content_image_generation_method" => sanitize_text_field($_POST['content_image_generation_method']),
1873
1874 // New fields
1875 "max_posts_per_cron" => absint($_POST['max_posts_per_cron']),
1876 "max_posts_per_day" => absint($_POST['max_posts_per_day']),
1877 "spam_ad_filter" => sanitize_text_field($_POST['spam_ad_filter']),
1878 "duplicate_content_filter" => sanitize_text_field($_POST['duplicate_content_filter']),
1879
1880 // New fields
1881 "openai_api_key" => sanitize_text_field($_POST['openai_api_key']),
1882 "xai_api_key" => sanitize_text_field($_POST['xai_api_key']),
1883 "falai_api_key" => sanitize_text_field($_POST['falai_api_key']),
1884 "stabilityai_api_key" => sanitize_text_field($_POST['stabilityai_api_key']),
1885 "serperdev_api_key" => sanitize_text_field($_POST['serperdev_api_key']),
1886 "primary_llm" => sanitize_text_field($_POST['primary_llm']),
1887 "secondary_llm" => sanitize_text_field($_POST['secondary_llm']),
1888 "deepseek_api_key" => sanitize_text_field(($_POST['deepseek_api_key'])),
1889 "groq_model" => sanitize_text_field($_POST['groq_model']),
1890 "default_image_url" => sanitize_url(($_POST['default_image_url'])),
1891
1892 // Social media sharing settings
1893 "social_media_status" => sanitize_text_field($_POST['social_media_status']),
1894 "twitter_api_key" => sanitize_text_field($_POST['twitter_api_key']),
1895 "telegram_api_key" => sanitize_text_field($_POST['telegram_api_key']),
1896 "instagram_api_key" => sanitize_text_field($_POST['instagram_api_key']),
1897
1898
1899 );
1900
1901
1902 // API e-posta ve anahtarını sadece API başarılı şekilde onaylanırsa kaydedin
1903 if ($save_api_key_email) {
1904 $received_data["api_key"] = $api_key;
1905 $received_data["api_email"] = $api_email;
1906 } else {
1907 // Mevcut API anahtarı ve e-postayı koru
1908 if (isset($existing_settings["api_key"])) {
1909 $received_data["api_key"] = $existing_settings["api_key"];
1910 }
1911 if (isset($existing_settings["api_email"])) {
1912 $received_data["api_email"] = $existing_settings["api_email"];
1913 }
1914 }
1915
1916 // Serialize and save the data
1917 $save = serialize($received_data);
1918 update_option('autowp_settings', $save, "yes");
1919
1920 // Show success message if successfully saved, if not show error message
1921 if (get_option('autowp_settings') == $save) {
1922 echo '<div class="alert alert-success" role="alert">' . esc_html__('Settings saved successfully!', 'autowp') . '</div>';
1923 } else {
1924 echo '<div class="alert alert-danger" role="alert">' . esc_html__('Error saving settings!', 'autowp') . '</div>';
1925 }
1926
1927 // Schedule WP-Cron
1928 if (!wp_next_scheduled('autowp_cron')) {
1929 wp_schedule_event(time(), $user_wpcron_time, 'autowp_cron');
1930 } else {
1931 wp_clear_scheduled_hook('autowp_cron');
1932 wp_schedule_event(time(), $user_wpcron_time, 'autowp_cron');
1933 }
1934 }
1935 }
1936
1937
1938
1939 function autowp_rewriting_promptscheme_page_handler() {
1940 // Veritabanından mevcut ayarları yükle
1941 $prompts = get_option('autowp_rewriting_promptscheme', []);
1942 if (!is_array($prompts)) {
1943 $prompts = maybe_unserialize($prompts); // Serileştirilmiş veriyi çözümleme
1944 if (!is_array($prompts)) {
1945 $prompts = []; // Eğer hala dizi değilse, boş bir diziye ayarla
1946 }
1947 }
1948
1949
1950 // Formdan gelen veriyi işle (ekleme, silme, sıralama değiştirme)
1951 if ($_SERVER['REQUEST_METHOD'] == 'POST') {
1952 if (isset($_POST['add_prompt'])) {
1953
1954 if (!isset($_POST['autowp_nonce']) || !wp_verify_nonce($_POST['autowp_nonce'], 'autowp_add_prompt_nonce')) {
1955 wp_die(esc_html__('Invalid request. Nonce verification failed.', 'autowp'));
1956 }
1957
1958
1959
1960 $element_type = sanitize_text_field($_POST['element_type']);
1961 $detailed_prompt = '';
1962 $is_content_or_blank = false;
1963
1964
1965 if($element_type == 'static-content'){
1966 $detailed_prompt = wp_kses_post($_POST['content']);
1967 $is_content_or_blank = ($detailed_prompt == '' or $detailed_prompt == null);
1968 }else{
1969 $detailed_prompt = sanitize_text_field($_POST['prompt']);
1970 $is_content_or_blank = ($detailed_prompt == '' or $detailed_prompt == null);
1971 }
1972
1973
1974
1975 // Ekleme sırasında kontroller
1976 if (count($prompts) >= 10 or $is_content_or_blank) {
1977 echo '<div class="alert alert-danger" role="alert">Maximum 10 prompts allowed and prompt/content cannot be empty!</div>';
1978 } else {
1979
1980 // Kelime sınırı kontrolü
1981 $prompt_words = explode(" ", $_POST['prompt']);
1982 if (count($prompt_words) > 300) {
1983 echo '<div class="alert alert-danger" role="alert">Detailed Prompt should not exceed 300 words.</div>';
1984 } else {
1985
1986 $new_prompt = [
1987 'name' => sanitize_text_field($_POST['name']),
1988 'detailed_prompt' => $detailed_prompt,
1989 'element_type' => sanitize_text_field($_POST['element_type']),
1990 ];
1991 $prompts[] = $new_prompt;
1992 echo '<div class="alert alert-success" role="alert">Your prompt successfully added to scheme!</div>';
1993 }
1994 }
1995 } elseif (isset($_POST['delete_prompt'])) {
1996 if (!isset($_POST['autowp_nonce']) || !wp_verify_nonce($_POST['autowp_nonce'], 'autowp_delete_prompt_nonce')) {
1997 wp_die(esc_html__('Invalid request. Nonce verification failed.', 'autowp'));
1998 }
1999
2000 $index_to_delete = intval($_POST['delete_index']);
2001 array_splice($prompts, $index_to_delete, 1);
2002 echo '<div class="alert alert-success" role="alert">Your prompt successfully deleted!</div>';
2003 } elseif (isset($_POST['move_up'])) {
2004 $index = intval($_POST['index']);
2005 if ($index > 0) {
2006 $temp = $prompts[$index - 1];
2007 $prompts[$index - 1] = $prompts[$index];
2008 $prompts[$index] = $temp;
2009 echo '<div class="alert alert-success" role="alert">Your prompt successfully move up!</div>';
2010 }
2011 } elseif (isset($_POST['move_down'])) {
2012 $index = intval($_POST['index']);
2013 if ($index < count($prompts) - 1) {
2014 $temp = $prompts[$index + 1];
2015 $prompts[$index + 1] = $prompts[$index];
2016 $prompts[$index] = $temp;
2017 echo '<div class="alert alert-success" role="alert">Your prompt successfully move down!</div>';
2018 }
2019 } elseif (isset($_POST['add_template'])) {
2020 $template_name = sanitize_text_field($_POST['template_name']);
2021 $template_prompt = sanitize_text_field($_POST['template_prompt']);
2022 if (count($prompts) >= 10) {
2023 echo '<div class="alert alert-danger" role="alert">Maximum 10 prompts allowed.</div>';
2024 } else {
2025 $new_prompt = [
2026 'name' => $template_name,
2027 'detailed_prompt' => $template_prompt,
2028 'max_tokens' => 300000
2029 ];
2030 $prompts[] = $new_prompt;
2031 echo '<div class="alert alert-success" role="alert">Your prompt successfully added to scheme!</div>';
2032 }
2033 }
2034 update_option('autowp_rewriting_promptscheme', $prompts);
2035 }
2036
2037 // HTML form ve mevcut verileri göster
2038 ?>
2039 <div class="wrap">
2040 <h2 class="mb-4"><?php echo esc_html__('Content Planner', 'autowp'); ?></h2>
2041
2042 <form method="post" class="mb-4">
2043 <?php wp_nonce_field('autowp_add_prompt_nonce', 'autowp_nonce'); ?>
2044 <div class="mb-3">
2045 <label for="name" class="form-label"><?php echo esc_html__('Name', 'autowp'); ?></label>
2046 <input type="text" id="name" name="name" required class="form-control" />
2047 </div>
2048
2049
2050 <div class="mb-3" id="prompt-container">
2051 <label for="prompt" class="form-label"><?php echo esc_html__('Detailed Prompt', 'autowp'); ?></label>
2052 <div class="tag-buttons mb-2">
2053 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{new_title}')">Post Title</button>
2054 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{language_code}')">Language Name</button>
2055 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{focus_keyword}')">Focus Keyword</button>
2056 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{combined_content}')">Original Content</button>
2057 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{subheading_count}')">Subheading Count</button>
2058 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{narration_style}')">Narration Style</button>
2059 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{related_keywords}')">Related Keywords</button>
2060 </div>
2061 <textarea id="prompt" name="prompt" rows="4" maxlength="1500" class="form-control"></textarea>
2062
2063 <small class="form-text text-muted">Maximum 300 words.</small>
2064 </div>
2065
2066 <!-- Static Content (hidden by default) -->
2067 <div class="mb-3" id="content-container" style="display: none;">
2068
2069 <label for="content" class="form-label"><?php echo esc_html__('HTML Content', 'autowp'); ?></label>
2070 <div class="tag-buttons mb-2">
2071 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertHTMLTag('<h1>Your Heading</h1>')">Heading 1</button>
2072 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertHTMLTag('<h2>Your Subheading</h2>')">Heading 2</button>
2073 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertHTMLTag('<p>Your paragraph text goes here.</p>')">Paragraph</button>
2074 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertHTMLTag('<img src=\'your-image-url.jpg\' alt=\'Image description\' />')">Image</button>
2075 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertHTMLTag('<blockquote>Your blockquote text.</blockquote>')">Blockquote</button>
2076 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertHTMLTag('<pre><code>Your code goes here.</code></pre>')">Code Block</button>
2077 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertHTMLTag('<ul><li>Item 1</li><li>Item 2</li></ul>')">Unordered List</button>
2078 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertHTMLTag('<ol><li>Item 1</li><li>Item 2</li></ol>')">Ordered List</button>
2079 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertHTMLTag('<hr />')">Horizontal Line</button>
2080 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertHTMLTag('<br />')">Line Break</button>
2081
2082 </div>
2083 <textarea id="content" name="content" rows="6" class="form-control"></textarea>
2084 <small class="form-text text-muted">Enter custom HTML content for static generation.</small>
2085 </div>
2086
2087
2088
2089
2090 <!-- Element Type Select -->
2091 <div class="mb-3">
2092 <label for="element_type" class="form-label"><?php echo esc_html__('HTML Tag Type', 'autowp'); ?></label>
2093 <select id="element_type" name="element_type" class="form-control" required>
2094 <option value="p">Paragraph (&lt;p&gt;)</option>
2095 <option value="ph2">Paragraphs with H2 Subheadings (&lt;p&gt;,&lt;h2&gt;)</option>
2096 <option value="h1">Subheading H1 (&lt;h1&gt;)</option>
2097 <option value="h2">Subheading H2 (&lt;h2&gt;)</option>
2098 <option value="h3">Subheading H3 (&lt;h3&gt;)</option>
2099 <option value="h4">Subheading H4 (&lt;h4&gt;)</option>
2100 <option value="h5">Subheading H5 (&lt;h5&gt;)</option>
2101 <option value="h6">Subheading H6 (&lt;h6&gt;)</option>
2102 <option value="img">AI-Generated Image (&lt;img&gt;)</option>
2103 <option value="blockquote">Block Quote (&lt;blockquote&gt;)</option>
2104 <option value="code">Code Block (&lt;code&gt;)</option>
2105 <option value="table">HTML Table (&lt;table&gt;)</option>
2106 <option value="faq">FAQ (Without Heading) </option>
2107 <option value="static-content">Static HTML Content</option>
2108
2109
2110 </select>
2111 <small class="form-text text-muted">Select the HTML element type for content generation (e.g., paragraphs, subheadings).</small>
2112 </div>
2113 <button type="submit" name="add_prompt" class="btn btn-primary"><?php echo esc_attr__('Add Prompt', 'autowp'); ?></button>
2114 </form>
2115
2116 <h3 class="mb-3"><?php echo esc_html__('Ready-Made Templates', 'autowp'); ?></h3>
2117 <!-- Template butonları için ayrı form yapıları -->
2118 <form method="post" class="d-grid gap-2 d-md-block mb-3">
2119 <input type="hidden" name="add_template" value="true">
2120 <input type="hidden" name="template_name" value="AutoWP Introduction">
2121 <input type="hidden" name="template_prompt" value="autowp-introduction">
2122 <button type="submit" class="btn btn-secondary">Add Introduction Template</button>
2123 </form>
2124 <form method="post" class="d-grid gap-2 d-md-block mb-3">
2125 <input type="hidden" name="add_template" value="true">
2126 <input type="hidden" name="template_name" value="AutoWP Subheadings">
2127 <input type="hidden" name="template_prompt" value="autowp-subheadings">
2128 <button type="submit" class="btn btn-secondary">Add Subheadings Template</button>
2129 </form>
2130 <form method="post" class="d-grid gap-2 d-md-block mb-3">
2131 <input type="hidden" name="add_template" value="true">
2132 <input type="hidden" name="template_name" value="AutoWP FAQ">
2133 <input type="hidden" name="template_prompt" value="autowp-faq">
2134 <button type="submit" class="btn btn-secondary">Add FAQ Template</button>
2135 </form>
2136 <form method="post" class="d-grid gap-2 d-md-block">
2137 <input type="hidden" name="add_template" value="true">
2138 <input type="hidden" name="template_name" value="AutoWP Results">
2139 <input type="hidden" name="template_prompt" value="autowp-result">
2140 <button type="submit" class="btn btn-secondary">Add Table + Results Template</button>
2141 </form>
2142
2143 <h3 class="mt-5 mb-3"><?php echo esc_html__('Existing Prompts', 'autowp'); ?></h3>
2144 <ul class="list-group">
2145 <?php foreach ($prompts as $index => $prompt) { ?>
2146 <li class="list-group-item d-flex justify-content-between align-items-start">
2147 <div>
2148 <strong>Prompt or Content: </strong><pre style="white-space: pre-wrap;"><?php echo esc_html($prompt['detailed_prompt']); ?></pre><br>
2149
2150 <strong>Element Type: </strong><?php echo isset($prompt['element_type']) ? esc_html($prompt['element_type']) : 'AutoWP Template'; ?><br>
2151 </div>
2152 <div class="btn-group">
2153 <form method="post" style="display: inline;">
2154 <?php wp_nonce_field('autowp_delete_prompt_nonce', 'autowp_nonce'); ?>
2155 <input type="hidden" name="delete_index" value="<?php echo esc_attr($index); ?>">
2156 <button type="submit" name="delete_prompt" class="btn btn-danger btn-sm">×</button>
2157 </form>
2158 <?php if ($index > 0) { ?>
2159 <form method="post" style="display: inline;">
2160 <input type="hidden" name="index" value="<?php echo esc_attr($index); ?>">
2161 <button type="submit" name="move_up" class="btn btn-link btn-sm text-primary"></button>
2162 </form>
2163 <?php } ?>
2164 <?php if ($index < count($prompts) - 1) { ?>
2165 <form method="post" style="display: inline;">
2166 <input type="hidden" name="index" value="<?php echo esc_attr($index); ?>">
2167 <button type="submit" name="move_down" class="btn btn-link btn-sm text-primary"></button>
2168 </form>
2169 <?php } ?>
2170 </div>
2171 </li>
2172 <?php } ?>
2173 </ul>
2174
2175 </div>
2176 <?php
2177 }
2178
2179
2180
2181 function autowp_writing_promptscheme_page_handler() {
2182 // Veritabanından mevcut ayarları yükle
2183 $prompts = get_option('autowp_writing_promptscheme', []);
2184
2185 // Formdan gelen veriyi işle (ekleme, silme, sıralama değiştirme)
2186 if ($_SERVER['REQUEST_METHOD'] == 'POST') {
2187 if (isset($_POST['add_prompt'])) {
2188
2189 if (!isset($_POST['autowp_nonce']) || !wp_verify_nonce($_POST['autowp_nonce'], 'autowp_add_prompt_nonce')) {
2190 wp_die(esc_html__('Invalid request. Nonce verification failed.', 'autowp'));
2191 }
2192
2193
2194 // Ekleme sırasında kontroller
2195 if (count($prompts) >= 5) {
2196 echo '<div class="alert alert-danger" role="alert">Maximum 5 prompts allowed.</div>';
2197 } else {
2198
2199 // Kelime sınırı kontrolü
2200 $prompt_words = explode(" ", $_POST['prompt']);
2201 if (count($prompt_words) > 300) {
2202 echo '<div class="alert alert-danger" role="alert">Detailed Prompt should not exceed 300 words.</div>';
2203 } else {
2204 $new_prompt = [
2205 'name' => sanitize_text_field($_POST['name']),
2206 'detailed_prompt' => sanitize_textarea_field($_POST['prompt']),
2207 'max_tokens' => intval($_POST['tokens'])
2208 ];
2209 $prompts[] = $new_prompt;
2210 echo '<div class="alert alert-success" role="alert">Your prompt successfully added to scheme!</div>';
2211
2212 }
2213 }
2214 } elseif (isset($_POST['delete_prompt'])) {
2215 if (!isset($_POST['autowp_nonce']) || !wp_verify_nonce($_POST['autowp_nonce'], 'autowp_delete_prompt_nonce')) {
2216 wp_die(esc_html__('Invalid request. Nonce verification failed.', 'autowp'));
2217 }
2218
2219 $index_to_delete = intval($_POST['delete_index']);
2220 array_splice($prompts, $index_to_delete, 1);
2221 echo '<div class="alert alert-success" role="alert">Your prompt successfully deleted!</div>';
2222
2223 } elseif (isset($_POST['move_up'])) {
2224 $index = intval($_POST['index']);
2225 if ($index > 0) {
2226 $temp = $prompts[$index - 1];
2227 $prompts[$index - 1] = $prompts[$index];
2228 $prompts[$index] = $temp;
2229 echo '<div class="alert alert-success" role="alert">Your prompt successfully move up!</div>';
2230
2231 }
2232 } elseif (isset($_POST['move_down'])) {
2233 $index = intval($_POST['index']);
2234 if ($index < count($prompts) - 1) {
2235 $temp = $prompts[$index + 1];
2236 $prompts[$index + 1] = $prompts[$index];
2237 $prompts[$index] = $temp;
2238 echo '<div class="alert alert-success" role="alert">Your prompt successfully move down!</div>';
2239
2240 }
2241 } elseif (isset($_POST['add_template'])) {
2242 $template_name = sanitize_text_field($_POST['template_name']);
2243 $template_prompt = sanitize_text_field($_POST['template_prompt']);
2244 if (count($prompts) >= 5) {
2245
2246 echo '<div class="alert alert-danger" role="alert">Maximum 5 prompts allowed.</div>';
2247
2248
2249 }else{
2250
2251 $new_prompt = [
2252 'name' => $template_name,
2253 'detailed_prompt' => $template_prompt,
2254 'max_tokens' => 3000
2255 ];
2256 $prompts[] = $new_prompt;
2257 echo '<div class="alert alert-success" role="alert">Your prompt successfully added to scheme!</div>';
2258
2259
2260 }
2261
2262 }
2263 update_option('autowp_writing_promptscheme', $prompts);
2264 }
2265
2266 // HTML form ve mevcut verileri göster
2267 ?>
2268 <div class="wrap">
2269 <h2 class="mb-4"><?php echo esc_html__('Writing Prompt Schemes', 'autowp'); ?></h2>
2270 <a class="btn btn-secondary mb-4" href="<?php echo esc_url(admin_url('admin.php?page=autowp_promptSettings')); ?>"><?php echo esc_html__('Back', 'autowp'); ?></a>
2271
2272 <form method="post" class="mb-4">
2273 <div class="mb-3">
2274 <label for="name" class="form-label"><?php echo esc_html__('Name', 'autowp'); ?></label>
2275 <input type="text" id="name" name="name" required class="form-control" />
2276 </div>
2277 <div class="mb-3">
2278 <label for="prompt" class="form-label"><?php echo esc_html__('Detailed Prompt', 'autowp'); ?></label>
2279 <!-- Tag Buttons -->
2280 <div class="tag-buttons mb-2">
2281 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{new_title}')">New Title</button>
2282 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{language_code}')">Language Code</button>
2283 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{focus_keyword}')">Focus Keyword</button>
2284 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{combined_content}')">Combined Content</button>
2285 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{subheading_count}')">Subheading Count</button>
2286 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{narration_style}')">Narration Style</button>
2287 <button type="button" class="btn btn-sm btn-outline-primary" onclick="insertTag('{related_keywords}')">Related Keywords</button>
2288 </div>
2289 <textarea id="prompt" name="prompt" required rows="4" maxlength="1500" class="form-control"></textarea>
2290 <small class="form-text text-muted">Maximum 300 words.</small>
2291 <br><br>
2292 <div class="alert alert-info" role="alert">
2293 <h4 class="alert-heading">Prompt Codes</h4>
2294 <p>$keywords: If you have selected Google Trends, it will return the most talked about topics related to your keyword on Trends. If you have selected "aigenerated", it will return the keywords with the highest search volume related to your keyword in search engines.</p>
2295
2296 </div>
2297 </div>
2298 <div class="mb-3">
2299 <label for="tokens" class="form-label"><?php echo esc_html__('Maximum Tokens', 'autowp'); ?></label>
2300 <input type="number" id="tokens" name="tokens" required min="300" max="1000" class="form-control" />
2301 </div>
2302 <button type="submit" name="add_prompt" class="btn btn-primary"><?php echo esc_attr__('Add Prompt', 'autowp'); ?></button>
2303 </form>
2304
2305 <h3 class="mb-3"><?php echo esc_html__('Ready-Made Templates', 'autowp'); ?></h3>
2306 <!-- Template butonları için ayrı form yapıları -->
2307 <form method="post" class="d-grid gap-2 d-md-block mb-3">
2308 <input type="hidden" name="add_template" value="true">
2309 <input type="hidden" name="template_name" value="AutoWP Introduction">
2310 <input type="hidden" name="template_prompt" value="autowp-introduction">
2311 <button type="submit" class="btn btn-secondary">Add Introduction Template</button>
2312 </form>
2313 <form method="post" class="d-grid gap-2 d-md-block mb-3">
2314 <input type="hidden" name="add_template" value="true">
2315 <input type="hidden" name="template_name" value="AutoWP Subheadings">
2316 <input type="hidden" name="template_prompt" value="autowp-subheadings">
2317 <button type="submit" class="btn btn-secondary">Add Subheadings Template</button>
2318 </form>
2319 <form method="post" class="d-grid gap-2 d-md-block">
2320 <input type="hidden" name="add_template" value="true">
2321 <input type="hidden" name="template_name" value="AutoWP Results">
2322 <input type="hidden" name="template_prompt" value="autowp-result">
2323 <button type="submit" class="btn btn-secondary">Add Results Template</button>
2324 </form>
2325
2326 <h3 class="mt-5 mb-3"><?php echo esc_html__('Existing Prompts', 'autowp'); ?></h3>
2327 <ul class="list-group">
2328 <?php foreach ($prompts as $index => $prompt) { ?>
2329 <li class="list-group-item d-flex justify-content-between align-items-start">
2330 <?php echo esc_html($prompt['name'] . ' - ' . $prompt['detailed_prompt'] . ' (Max Tokens: ' . $prompt['max_tokens'] . ')'); ?>
2331 <div class="btn-group">
2332 <form method="post" style="display: inline;">
2333 <input type="hidden" name="delete_index" value="<?php echo esc_attr($index); ?>">
2334 <button type="submit" name="delete_prompt" class="btn btn-danger btn-sm">×</button>
2335 </form>
2336 <?php if ($index > 0) { ?>
2337 <form method="post" style="display: inline;">
2338 <input type="hidden" name="index" value="<?php echo esc_attr($index); ?>">
2339 <button type="submit" name="move_up" class="btn btn-link btn-sm text-primary"></button>
2340 </form>
2341 <?php } ?>
2342 <?php if ($index < count($prompts) - 1) { ?>
2343 <form method="post" style="display: inline;">
2344 <input type="hidden" name="index" value="<?php echo esc_attr($index); ?>">
2345 <button type="submit" name="move_down" class="btn btn-link btn-sm text-primary"></button>
2346 </form>
2347 <?php } ?>
2348 </div>
2349 </li>
2350 <?php } ?>
2351 </ul>
2352 </div>
2353
2354
2355 <?php
2356 }
2357
2358
2359
2360
2361
2362
2363 function autowp_settings_page_handler() {
2364
2365 autowp_settings_page_set_options();
2366
2367 // Prepare the next cron time
2368 $next_cron_time = wp_next_scheduled('autowp_cron');
2369 $next_cron_time_formatted = $next_cron_time ? date_i18n('Y-m-d H:i:s', $next_cron_time) : __('No scheduled cron event found', 'autowp');
2370 ?>
2371
2372 <!-- Include the success/error message container -->
2373 <div id="cron-message" class="alert" style="display:none;"></div>
2374
2375 <form method="post" class="form-horizontal">
2376 <?php wp_nonce_field('autowp_settings_nonce', '_wpnonce'); ?>
2377 <fieldset>
2378 <!-- Form Name -->
2379 <legend><?php esc_html_e('Cron Settings', 'autowp'); ?></legend>
2380
2381 <!-- Next Scheduled Cron Time -->
2382 <div class="form-group">
2383 <label class="col-md-4 control-label"><?php esc_html_e('Next Cron Trigger Time', 'autowp'); ?></label>
2384 <div class="col-md-4">
2385 <p id="next-cron-time"><?php echo esc_html($next_cron_time_formatted); ?></p>
2386 </div>
2387 </div>
2388
2389
2390
2391
2392 <!-- Time Type -->
2393 <div class="form-group">
2394 <label class="col-md-4 control-label" for="selected_time_type"><?php esc_html_e('Time Type', 'autowp'); ?></label>
2395 <div class="col-md-4">
2396 <select id="selected_time_type" name="selected_time_type" class="form-control">
2397 <option value="1" <?php if(unserialize(get_option("autowp_settings"))["selected_time_type"] === '1') {echo ' selected'; } ?>><?php esc_html_e('Hour', 'autowp'); ?></option>
2398 <option value="2" <?php if(unserialize(get_option("autowp_settings"))["selected_time_type"] === '2') {echo ' selected'; } ?>><?php esc_html_e('Twice Daily', 'autowp'); ?></option>
2399 <option value="3" <?php if(unserialize(get_option("autowp_settings"))["selected_time_type"] === '3') {echo ' selected'; } ?>><?php esc_html_e('Daily', 'autowp'); ?></option>
2400 <option value="4" <?php if(unserialize(get_option("autowp_settings"))["selected_time_type"] === '4') {echo ' selected'; } ?>><?php esc_html_e('Weekly', 'autowp'); ?></option>
2401 </select>
2402 </div>
2403 </div>
2404
2405
2406
2407 <!-- WP-Cron Status -->
2408 <div class="form-group">
2409 <label class="col-md-4 control-label" for="wpcron_status"><?php esc_html_e('WP-Cron Status', 'autowp'); ?></label>
2410 <div class="col-md-4">
2411 <label class="radio-inline">
2412 <input type="radio" name="wpcron_status" value="1" <?php $settings = unserialize(get_option('autowp_settings')); if($settings['wpcron_status'] === '1' || !isset($settings['wpcron_status']) ){ echo 'checked="checked"'; } ?> ><?php esc_html_e('Active', 'autowp'); ?>
2413 </label>
2414 <label class="radio-inline">
2415 <input type="radio" name="wpcron_status" value="2" <?php $settings = unserialize(get_option('autowp_settings')); if($settings['wpcron_status'] !== '1' && isset($settings['wpcron_status']) ){ echo 'checked="checked"'; } ?> ><?php esc_html_e('Passive', 'autowp'); ?>
2416 </label>
2417 </div>
2418 </div>
2419
2420 <!-- Description -->
2421 <div class="form-group">
2422 <label class="col-md-4 control-label" for="description"><?php esc_html_e('If you want to stop generating new posts, you should set WP-Cron to passive.', 'autowp'); ?></label>
2423 <div class="col-md-4">
2424 <label><?php esc_html_e('', 'autowp'); ?></label>
2425 </div>
2426 </div>
2427 <!-- API Ayarları -->
2428 <legend><?php esc_html_e('API Settings', 'autowp'); ?></legend>
2429
2430 <!-- Email -->
2431 <div class="form-group">
2432 <label class="col-md-4 control-label" for="api_email"><?php esc_html_e('Email', 'autowp'); ?></label>
2433 <div class="col-md-4">
2434 <input id="api_email" name="api_email" type="text" class="form-control" value="<?php echo esc_attr(unserialize(get_option("autowp_settings"))["api_email"]); ?>" placeholder="<?php esc_html_e('Enter your email', 'autowp'); ?>">
2435 <p class="help-block"><?php esc_html_e('IMPORTANT! This email is used for API registration and authentication.', 'autowp'); ?></p>
2436 </div>
2437 </div>
2438
2439 <!-- API Key -->
2440 <div class="form-group">
2441 <label class="col-md-4 control-label" for="api_key"><?php esc_html_e('AutoWP API Key', 'autowp'); ?></label>
2442 <div class="col-md-4">
2443 <input id="api_key" name="api_key" type="text" class="form-control" value="<?php echo esc_attr(unserialize(get_option("autowp_settings"))["api_key"]); ?>" placeholder="<?php esc_html_e('Enter your API key', 'autowp'); ?>">
2444 <p class="help-block"><?php esc_html_e('IMPORTANT! AutoWP API key for generating content. If you left it empty, you cannot generate any content!', 'autowp'); ?></p>
2445 </div>
2446 </div>
2447
2448 <!-- OpenAI API Key -->
2449 <div class="form-group">
2450 <label class="col-md-4 control-label" for="openai_api_key"><?php esc_html_e('OpenAI API Key', 'autowp'); ?></label>
2451 <div class="col-md-4">
2452 <input id="openai_api_key" name="openai_api_key" type="text" class="form-control" value="<?php echo esc_attr(unserialize(get_option("autowp_settings"))["openai_api_key"]); ?>" placeholder="<?php esc_html_e('Enter your OpenAI API key', 'autowp'); ?>">
2453 <p class="help-block"><?php esc_html_e('IMPORTANT! Only users with the UNLIMITED package need to configure this setting. Learn how to obtain the key here: https://www.youtube.com/watch?v=OB99E7Y1cMA', 'autowp'); ?></p>
2454 </div>
2455 </div>
2456
2457 <!-- xAI API Key -->
2458 <div class="form-group">
2459 <label class="col-md-4 control-label" for="xai_api_key"><?php esc_html_e('xAI API Key', 'autowp'); ?></label>
2460 <div class="col-md-4">
2461 <input id="xai_api_key" name="xai_api_key" type="text" class="form-control" value="<?php echo esc_attr(unserialize(get_option("autowp_settings"))["xai_api_key"]); ?>" placeholder="<?php esc_html_e('Enter your xAI API key', 'autowp'); ?>">
2462 <p class="help-block"><?php esc_html_e('IMPORTANT! Only users with the UNLIMITED package need to configure this setting. Learn how to obtain the key here: https://www.youtube.com/watch?v=4Tzs4qunYJY', 'autowp'); ?></p>
2463 </div>
2464 </div>
2465
2466 <!-- Groq API Key -->
2467 <div class="form-group">
2468 <label class="col-md-4 control-label" for="deepseek_api_key"><?php esc_html_e('Groq API Key', 'autowp'); ?></label>
2469 <div class="col-md-4">
2470 <input id="deepseek_api_key" name="deepseek_api_key" type="text" class="form-control" value="<?php echo esc_attr(unserialize(get_option("autowp_settings"))["deepseek_api_key"]); ?>" placeholder="<?php esc_html_e('Enter your Groq API key', 'autowp'); ?>">
2471 <p class="help-block"><?php esc_html_e('IMPORTANT! Enter your Groq API key for accessing Groq services.', 'autowp'); ?></p>
2472 </div>
2473 </div>
2474
2475 <!-- Groq Model Selection (Statik) -->
2476 <div class="form-group">
2477 <label class="col-md-4 control-label" for="groq_model"><?php esc_html_e('Groq Model', 'autowp'); ?></label>
2478 <div class="col-md-4">
2479 <select id="groq_model" name="groq_model" class="form-control">
2480 <?php
2481 // Groq model seçiminin kaydedilen değerini alıyoruz
2482 $selected_groq_model = isset(unserialize(get_option("autowp_settings"))["groq_model"]) ? unserialize(get_option("autowp_settings"))["groq_model"] : '';
2483
2484 // Ekteki ekran görüntülerindeki model gruplarına göre statik bir dizi oluşturuyoruz.
2485 $static_models = array(
2486 'Alibaba Cloud' => array(
2487 'qwen-2.5-32b',
2488 'qwen-2.5-coder-32b',
2489 'qwen-qwq-32b',
2490 ),
2491 'DeepSeek / Alibaba Cloud' => array(
2492 'deepseek-r1-distill-qwen-32b',
2493 ),
2494 'DeepSeek / Meta' => array(
2495 'deepseek-r1-distill-llama-70b',
2496 ),
2497 'Google' => array(
2498 'gemma2-9b-it',
2499 ),
2500 'Hugging Face' => array(
2501 'distil-whisper-large-v3-en',
2502 ),
2503 'OpenAI' => array(
2504 'whisper-large-v3',
2505 'whisper-large-v3-turbo',
2506 ),
2507 'Mistral AI' => array(
2508 'mistral-saba-24b',
2509 'mixtral-8x7b-32768',
2510 ),
2511 'Llama' => array(
2512 'llama-3.2-11b-vision-preview',
2513 'llama-3.2-3b-preview',
2514 'llama-3.2-7b-preview',
2515 'llama-3.2-90b-vision-preview',
2516 'llama-3.2-90b-preview',
2517 'llama-3.2-70b-vision-preview',
2518 'llama-3.3-70b-versatile',
2519 'llama-3.3-70b-specdec',
2520 'llama-guard-3-8b',
2521 'llama-70b-8192',
2522 'llama-3-8b-8192',
2523 ),
2524 );
2525
2526 // Grupları ve modelleri select içinde listeliyoruz
2527 foreach ($static_models as $group_label => $models) {
2528 echo '<optgroup label="'.esc_attr($group_label).'">';
2529 foreach ($models as $model) {
2530 $selected = ($model === $selected_groq_model) ? 'selected' : '';
2531 echo '<option value="'.esc_attr($model).'" '.$selected.'>'.esc_html($model).'</option>';
2532 }
2533 echo '</optgroup>';
2534 }
2535 ?>
2536 </select>
2537 <p class="help-block"><?php esc_html_e('Select a Groq model to use from the static list of available models.', 'autowp'); ?></p>
2538 </div>
2539 </div>
2540
2541
2542
2543
2544 <!-- FalAI API Key -->
2545 <div class="form-group">
2546 <label class="col-md-4 control-label" for="falai_api_key"><?php esc_html_e('FalAI API Key', 'autowp'); ?></label>
2547 <div class="col-md-4">
2548 <input id="falai_api_key" name="falai_api_key" type="text" class="form-control" value="<?php echo esc_attr(unserialize(get_option("autowp_settings"))["falai_api_key"]); ?>" placeholder="<?php esc_html_e('Enter your FalAI API key', 'autowp'); ?>">
2549 <p class="help-block"><?php esc_html_e('IMPORTANT! Only users with the UNLIMITED package need to configure this setting. Learn how to obtain the key here: https://fal.ai', 'autowp'); ?></p>
2550 </div>
2551 </div>
2552
2553 <!-- StabilityAI API Key -->
2554 <div class="form-group">
2555 <label class="col-md-4 control-label" for="stabilityai_api_key"><?php esc_html_e('StabilityAI API Key', 'autowp'); ?></label>
2556 <div class="col-md-4">
2557 <input id="stabilityai_api_key" name="stabilityai_api_key" type="text" class="form-control" value="<?php echo esc_attr(unserialize(get_option("autowp_settings"))["stabilityai_api_key"]); ?>" placeholder="<?php esc_html_e('Enter your StabilityAI API key', 'autowp'); ?>">
2558 <p class="help-block"><?php esc_html_e('IMPORTANT! Only users with the UNLIMITED package need to configure this setting. Learn how to obtain the key here: https://www.youtube.com/watch?v=De-SOrWHMh8', 'autowp'); ?></p>
2559 </div>
2560 </div>
2561
2562 <!-- SerperDEV API Key -->
2563 <div class="form-group">
2564 <label class="col-md-4 control-label" for="serperdev_api_key"><?php esc_html_e('SerperDEV API Key', 'autowp'); ?></label>
2565 <div class="col-md-4">
2566 <input id="serperdev_api_key" name="serperdev_api_key" type="text" class="form-control" value="<?php echo esc_attr(unserialize(get_option("autowp_settings"))["serperdev_api_key"]); ?>" placeholder="<?php esc_html_e('Enter your SerperDEV API key', 'autowp'); ?>">
2567 <p class="help-block"><?php esc_html_e('IMPORTANT! Only users with the UNLIMITED package need to configure this setting. Learn how to obtain the key here: https://serper.dev/signup', 'autowp'); ?></p>
2568 </div>
2569 </div>
2570
2571 <!-- Primary LLM Option -->
2572 <div class="form-group">
2573 <label class="col-md-4 control-label" for="primary_llm"><?php esc_html_e('Primary LLM Option', 'autowp'); ?></label>
2574 <div class="col-md-4">
2575 <select id="primary_llm" name="primary_llm" class="form-control">
2576 <option value="openai" <?php if (isset(unserialize(get_option("autowp_settings"))["primary_llm"]) && unserialize(get_option("autowp_settings"))["primary_llm"] === 'openai') { echo 'selected'; } ?>><?php esc_html_e('OpenAI', 'autowp'); ?></option>
2577 <option value="xai" <?php if (isset(unserialize(get_option("autowp_settings"))["primary_llm"]) && unserialize(get_option("autowp_settings"))["primary_llm"] === 'xai') { echo 'selected'; } ?>><?php esc_html_e('xAI Grok', 'autowp'); ?></option>
2578 <option value="groq" <?php if (isset(unserialize(get_option("autowp_settings"))["primary_llm"]) && unserialize(get_option("autowp_settings"))["primary_llm"] === 'groq') { echo 'selected'; } ?>><?php esc_html_e('Groq', 'autowp'); ?></option>
2579 </select>
2580 <p class="help-block"><?php esc_html_e('Select the primary LLM provider. This provider will be used as the default for content generation.', 'autowp'); ?></p>
2581 </div>
2582 </div>
2583
2584 <!-- Secondary LLM Option -->
2585 <div class="form-group">
2586 <label class="col-md-4 control-label" for="secondary_llm"><?php esc_html_e('Secondary LLM Option', 'autowp'); ?></label>
2587 <div class="col-md-4">
2588 <select id="secondary_llm" name="secondary_llm" class="form-control">
2589 <option value="openai" <?php if (isset(unserialize(get_option("autowp_settings"))["secondary_llm"]) && unserialize(get_option("autowp_settings"))["secondary_llm"] === 'openai') { echo 'selected'; } ?>><?php esc_html_e('OpenAI', 'autowp'); ?></option>
2590 <option value="xai" <?php if (isset(unserialize(get_option("autowp_settings"))["primary_llm"]) && unserialize(get_option("autowp_settings"))["secondary_llm"] === 'xai') { echo 'selected'; } ?>><?php esc_html_e('xAI Grok', 'autowp'); ?></option>
2591 <option value="groq" <?php if (isset(unserialize(get_option("autowp_settings"))["secondary_llm"]) && unserialize(get_option("autowp_settings"))["secondary_llm"] === 'groq') { echo 'selected'; } ?>><?php esc_html_e('Groq', 'autowp'); ?></option>
2592 </select>
2593 <p class="help-block"><?php esc_html_e('Select the secondary LLM provider. This option will be used if the primary provider fails.', 'autowp'); ?></p>
2594 </div>
2595 </div>
2596
2597
2598 <!-- Post Status -->
2599 <legend><?php esc_html_e('Post Settings', 'autowp'); ?></legend>
2600
2601 <!-- Default Image URL -->
2602 <div class="form-group">
2603 <label class="col-md-4 control-label" for="default_image_url"><?php esc_html_e('Default Image URL', 'autowp'); ?></label>
2604 <div class="col-md-4">
2605 <input id="default_image_url" name="default_image_url" type="url" class="form-control" value="<?php
2606 echo isset(unserialize(get_option("autowp_settings"))["default_image_url"]) ? esc_url(unserialize(get_option("autowp_settings"))["default_image_url"]) : '';
2607 ?>" placeholder="<?php esc_html_e('Enter default image URL', 'autowp'); ?>">
2608 <p class="help-block"><?php esc_html_e('If no specific thumbnail is set for a post, this image URL will be used as the default thumbnail. Leave empty to disable this feature.', 'autowp'); ?></p>
2609 </div>
2610 </div>
2611
2612
2613 <div class="form-group">
2614 <label class="col-md-4 control-label" for="post_status"><?php esc_html_e('Post Status', 'autowp'); ?></label>
2615 <div class="col-md-4">
2616 <select id="post_status" name="post_status" class="form-control">
2617 <?php
2618 $selected_post_status = isset(unserialize(get_option("autowp_settings"))["post_status"]) ? unserialize(get_option("autowp_settings"))["post_status"] : 'publish';
2619
2620 $statuses = array(
2621 'publish' => __('Published', 'autowp'),
2622 'draft' => __('Draft', 'autowp')
2623 );
2624
2625 foreach ($statuses as $status_value => $status_label) {
2626 $selected = ($status_value === $selected_post_status) ? 'selected' : '';
2627 echo '<option value="' . esc_attr($status_value) . '" ' . esc_attr($selected) . '>' . esc_html($status_label) . '</option>';
2628 }
2629 ?>
2630 </select>
2631 </div>
2632 </div>
2633
2634
2635 <!-- Content Image Generation Method -->
2636 <div class="form-group">
2637 <label class="col-md-4 control-label" for="content_image_generation_method"><?php esc_html_e('Content Image Generation Method', 'autowp'); ?></label>
2638 <div class="col-md-4">
2639 <select id="content_image_generation_method" name="content_image_generation_method" class="form-control">
2640 <?php
2641 $methods = array(
2642 'stable_diffusion' => __('Stable Diffusion', 'autowp'),
2643 'duckduckgo_image_search' => __('DuckDuckGo Image Search', 'autowp')
2644 );
2645
2646 $selected_method = isset(unserialize(get_option("autowp_settings"))["content_image_generation_method"]) ? unserialize(get_option("autowp_settings"))["content_image_generation_method"] : 'stable_diffusion';
2647
2648 foreach ($methods as $method_value => $method_label) {
2649 $selected = ($method_value === $selected_method) ? 'selected' : '';
2650 echo '<option value="' . esc_attr($method_value) . '" ' . esc_attr($selected) . '>' . esc_html($method_label) . '</option>';
2651 }
2652 ?>
2653 </select>
2654 <p class="help-block">
2655 <?php esc_html_e('This setting defines the method used to generate images within the post content. It is not related to the thumbnail image.', 'autowp'); ?>
2656 </p>
2657 </div>
2658 </div>
2659
2660 <!-- Maximum Posts Per Cron -->
2661 <div class="form-group">
2662 <label class="col-md-4 control-label" for="max_posts_per_cron"><?php esc_html_e('Maximum Posts Per Cron Trigger', 'autowp'); ?></label>
2663 <div class="col-md-4">
2664 <select id="max_posts_per_cron" name="max_posts_per_cron" class="form-control">
2665 <?php
2666 $current_value = isset(unserialize(get_option("autowp_settings"))["max_posts_per_cron"]) ?
2667 esc_html(unserialize(get_option("autowp_settings"))["max_posts_per_cron"]) : 1;
2668 ?>
2669 <option value="1" <?php selected($current_value, 1); ?>>1</option>
2670 <option value="2" <?php selected($current_value, 2); ?>>2</option>
2671 <option value="3" <?php selected($current_value, 3); ?>>3</option>
2672 </select>
2673 <p class="help-block"><?php esc_html_e('This sets the maximum number of posts that can be generated each time the cron job is triggered. Default: 1.', 'autowp'); ?></p>
2674 </div>
2675 </div>
2676
2677
2678 <!-- Maximum Posts Per Day -->
2679 <div class="form-group">
2680 <label class="col-md-4 control-label" for="max_posts_per_day"><?php esc_html_e('Maximum Posts Per Day', 'autowp'); ?></label>
2681 <div class="col-md-4">
2682 <input id="max_posts_per_day" name="max_posts_per_day" type="number" class="form-control" value="<?php
2683 echo isset(unserialize(get_option("autowp_settings"))["max_posts_per_day"]) ? esc_html(unserialize(get_option("autowp_settings"))["max_posts_per_day"]) : 20;
2684 ?>" placeholder="<?php esc_html_e('Enter maximum posts per day', 'autowp'); ?>" min="1">
2685 <p class="help-block"><?php esc_html_e('This sets the maximum number of posts that can be generated within a single day. Default: 20.', 'autowp'); ?></p>
2686 </div>
2687 </div>
2688
2689 <!-- Spam and Ad Filter -->
2690 <div class="form-group">
2691 <label class="col-md-4 control-label" for="spam_ad_filter"><?php esc_html_e('Spam and Ad Filter', 'autowp'); ?></label>
2692 <div class="col-md-4">
2693 <label class="radio-inline">
2694 <input type="radio" name="spam_ad_filter" value="1" <?php if(unserialize(get_option("autowp_settings"))["spam_ad_filter"] === '1') { echo 'checked'; } ?>>
2695 <?php esc_html_e('Active', 'autowp'); ?>
2696 </label>
2697 <label class="radio-inline">
2698 <input type="radio" name="spam_ad_filter" value="0" <?php if(unserialize(get_option("autowp_settings"))["spam_ad_filter"] !== '1') { echo 'checked'; } ?>>
2699 <?php esc_html_e('Passive', 'autowp'); ?>
2700 </label>
2701 <p class="help-block"><?php esc_html_e('When active, content sources will be checked for spam and advertisements before generating posts. Processing will start only if the content passes the spam filter. Default: Passive.', 'autowp'); ?></p>
2702 </div>
2703 </div>
2704
2705 <!-- Duplicate Content Filter -->
2706 <div class="form-group">
2707 <label class="col-md-4 control-label" for="duplicate_content_filter"><?php esc_html_e('Similar Content Filter', 'autowp'); ?></label>
2708 <div class="col-md-4">
2709 <label class="radio-inline">
2710 <input type="radio" name="duplicate_content_filter" value="1" <?php if(!isset(unserialize(get_option("autowp_settings"))["duplicate_content_filter"]) || unserialize(get_option("autowp_settings"))["duplicate_content_filter"] === '1') { echo 'checked'; } ?>>
2711 <?php esc_html_e('Active', 'autowp'); ?>
2712 </label>
2713 <label class="radio-inline">
2714 <input type="radio" name="duplicate_content_filter" value="0" <?php if(isset(unserialize(get_option("autowp_settings"))["duplicate_content_filter"]) && unserialize(get_option("autowp_settings"))["duplicate_content_filter"] === '0') { echo 'checked'; } ?>>
2715 <?php esc_html_e('Passive', 'autowp'); ?>
2716 </label>
2717 <p class="help-block"><?php esc_html_e('When active, the plugin will avoid generating content that is similar to existing posts. Default: Active.', 'autowp'); ?></p>
2718 </div>
2719 </div>
2720
2721
2722
2723
2724
2725 <legend><?php esc_html_e('Image Format', 'autowp'); ?></legend>
2726 <!-- Image Format -->
2727 <div class="form-group">
2728 <label class="col-md-4 control-label" for="image_format"><?php esc_html_e('Image Format', 'autowp'); ?></label>
2729 <div class="col-md-4">
2730 <select id="image_format" name="image_format" class="form-control">
2731 <?php
2732 $image_formats = array('png', 'jpeg', 'webp');
2733 $selected_image_format = isset(unserialize(get_option("autowp_settings"))["image_format"]) ? unserialize(get_option("autowp_settings"))["image_format"] : 'jpeg';
2734
2735 foreach ($image_formats as $format) {
2736 $selected = ($format === $selected_image_format) ? 'selected' : '';
2737 echo '<option value="' . esc_attr($format) . '" ' . esc_attr($selected) . '>' . esc_html(strtoupper($format)) . '</option>';
2738 }
2739 ?>
2740 </select>
2741 </div>
2742 </div>
2743
2744
2745 <legend><?php esc_html_e('Stable Diffusion Settings', 'autowp'); ?></legend>
2746 <!-- Stable Diffusion Style -->
2747 <div class="form-group">
2748 <label class="col-md-4 control-label" for="stable_diffusion_style"><?php esc_html_e('Stable Diffusion Style', 'autowp'); ?></label>
2749 <div class="col-md-4">
2750 <select id="stable_diffusion_style" name="stable_diffusion_style" class="form-control">
2751 <?php
2752 $styles = array('None', 'enhance', 'anime', 'photographic', 'digital-art','comic-book','fantasy-art','line-art','analog-film','neon-punk','isometric','low-poly','origami','modeling-compound','cinematic','3d-model','pixel-art','tile-texture');
2753 $selected_style = isset(unserialize(get_option("autowp_settings"))["stable_diffusion_style"]) ? unserialize(get_option("autowp_settings"))["stable_diffusion_style"] : 'None';
2754
2755 foreach ($styles as $style) {
2756 $selected = ($style === $selected_style) ? 'selected' : '';
2757 echo '<option value="' . esc_attr($style) . '" ' . esc_attr($selected) . '>' . esc_html($style) . '</option>';
2758 }
2759
2760 ?>
2761 </select>
2762 </div>
2763 </div>
2764
2765
2766 <!-- Stable Diffusion Size -->
2767 <div class="form-group">
2768 <label class="col-md-4 control-label" for="stable_diffusion_size"><?php esc_html_e('Stable Diffusion Size', 'autowp'); ?></label>
2769 <div class="col-md-4">
2770 <select id="stable_diffusion_size" name="stable_diffusion_size" class="form-control">
2771 <?php
2772 $sd_sizes = array('16:9', '1:1', '21:9', '2:3', '3:2', '4:5', '5:4', '9:16', '9:21');
2773 $selected_sd_size = isset(unserialize(get_option("autowp_settings"))["stable_diffusion_size"]) ? unserialize(get_option("autowp_settings"))["stable_diffusion_size"] : '16:9';
2774
2775 foreach ($sd_sizes as $size) {
2776 $selected = ($size === $selected_sd_size) ? 'selected' : '';
2777 echo '<option value="' . esc_attr($size) . '" ' . esc_attr($selected) . '>' . esc_html($size) . '</option>';
2778 }
2779 ?>
2780 </select>
2781 </div>
2782 </div>
2783
2784
2785
2786 <!-- Flux Settings -->
2787 <legend><?php esc_html_e('Flux Settings', 'autowp'); ?></legend>
2788
2789 <!-- Image Size -->
2790 <div class="form-group">
2791 <label class="col-md-4 control-label" for="flux_image_size"><?php esc_html_e('Image Size', 'autowp'); ?></label>
2792 <div class="col-md-4">
2793 <select id="flux_image_size" name="flux_image_size" class="form-control">
2794 <?php
2795 $flux_sizes = array('square_hd', 'square', 'portrait_3_4', 'portrait_9_16', 'landscape_4_3', 'landscape_16_9');
2796 $selected_flux_size = isset(unserialize(get_option("autowp_settings"))["flux_image_size"]) ? unserialize(get_option("autowp_settings"))["flux_image_size"] : 'square_hd';
2797
2798 foreach ($flux_sizes as $size) {
2799 $selected = ($size === $selected_flux_size) ? 'selected' : '';
2800 echo '<option value="' . esc_attr($size) . '" ' . esc_attr($selected) . '>' . esc_html(str_replace('_', ' ', ucfirst($size))) . '</option>';
2801 }
2802 ?>
2803 </select>
2804 </div>
2805 </div>
2806
2807 <legend><?php esc_html_e('DALL-E Settings', 'autowp'); ?></legend>
2808
2809 <!-- DALL-E 2 Size -->
2810 <div class="form-group">
2811 <label class="col-md-4 control-label" for="dalle_2_size"><?php esc_html_e('DALL-E 2 Size', 'autowp'); ?></label>
2812 <div class="col-md-4">
2813 <select id="dalle_2_size" name="dalle_2_size" class="form-control">
2814 <?php
2815 $dalle_2_sizes = array('1024x1024','512x512','256x256');
2816 $selected_dalle_2_size = isset(unserialize(get_option("autowp_settings"))["dalle_2_size"]) ? unserialize(get_option("autowp_settings"))["dalle_2_size"] : '1024x1024';
2817
2818 foreach ($dalle_2_sizes as $size) {
2819 $selected = ($size === $selected_dalle_2_size) ? 'selected' : '';
2820 echo '<option value="' . esc_attr($size) . '" ' . esc_attr($selected) . '>' . esc_html($size) . '</option>';
2821 }
2822 ?>
2823 </select>
2824 </div>
2825 </div>
2826
2827
2828 <!-- DALL-E 3 Size -->
2829 <div class="form-group">
2830 <label class="col-md-4 control-label" for="dalle_3_size"><?php esc_html_e('DALL-E 3 Size', 'autowp'); ?></label>
2831 <div class="col-md-4">
2832 <select id="dalle_3_size" name="dalle_3_size" class="form-control">
2833 <?php
2834 $dalle_3_sizes = array('1024x1024', '1792x1024', '1024x1792');
2835 $selected_dalle_3_size = isset(unserialize(get_option("autowp_settings"))["dalle_3_size"]) ? unserialize(get_option("autowp_settings"))["dalle_3_size"] : '1024x1024';
2836
2837 foreach ($dalle_3_sizes as $size) {
2838 $selected = ($size === $selected_dalle_3_size) ? 'selected' : '';
2839 echo '<option value="' . esc_attr($size) . '" ' . esc_attr($selected) . '>' . esc_html($size) . '</option>';
2840 }
2841 ?>
2842 </select>
2843 </div>
2844 </div>
2845
2846
2847 <!-- DALL-E 3 Style -->
2848 <div class="form-group">
2849 <label class="col-md-4 control-label" for="dalle_3_style"><?php esc_html_e('DALL-E 3 Style', 'autowp'); ?></label>
2850 <div class="col-md-4">
2851 <select id="dalle_3_style" name="dalle_3_style" class="form-control">
2852 <?php
2853 $dalle_3_styles = array('natural', 'vivid');
2854 $selected_dalle_3_style = isset(unserialize(get_option("autowp_settings"))["dalle_3_style"]) ? unserialize(get_option("autowp_settings"))["dalle_3_style"] : 'natural';
2855
2856 foreach ($dalle_3_styles as $style) {
2857 $selected = ($style === $selected_dalle_3_style) ? 'selected' : '';
2858 echo '<option value="' . esc_attr($style) . '" ' . esc_attr($selected) . '>' . esc_html(ucfirst($style)) . '</option>';
2859 }
2860 ?>
2861 </select>
2862 </div>
2863 </div>
2864
2865
2866
2867
2868 <!-- Image Motification Settings -->
2869 <legend><?php esc_html_e('Image Modification Settings', 'autowp'); ?></legend>
2870
2871
2872
2873 <!-- Image Modification Status -->
2874 <div class="form-group">
2875 <label class="col-md-4 control-label" for="image_modification_status"><?php esc_html_e('Image Modification Status', 'autowp'); ?></label>
2876 <div class="col-md-4">
2877 <label class="radio-inline">
2878 <input type="radio" name="image_modification_status" value="1" <?php if(unserialize(get_option("autowp_settings"))["image_modification_status"] === '1') {echo ' checked'; } ?>><?php esc_html_e('Active', 'autowp'); ?>
2879 </label>
2880 <label class="radio-inline">
2881 <input type="radio" name="image_modification_status" value="0" <?php if(unserialize(get_option("autowp_settings"))["image_modification_status"] !== '1') {echo ' checked'; } ?>><?php esc_html_e('Inactive', 'autowp'); ?>
2882 </label>
2883 <p class="help-block"><?php esc_html_e('If inactive, the images will be published without any modification.', 'autowp'); ?></p>
2884 </div>
2885 </div>
2886
2887 <!-- Image Generating Settings -->
2888 <!-- Width -->
2889 <div class="form-group">
2890 <label class="col-md-4 control-label" for="ai_image_width"><?php esc_html_e('Width', 'autowp'); ?></label>
2891 <div class="col-md-4">
2892 <input id="ai_image_width" name="ai_image_width" type="number" class="form-control" value="<?php
2893 if (isset(unserialize(get_option("autowp_settings"))["ai_image_width"])) {
2894 echo esc_html(unserialize(get_option("autowp_settings"))["ai_image_width"]);
2895 } else{
2896 echo '0';
2897 }
2898 ?>" placeholder="Enter width">
2899 </div>
2900 </div>
2901
2902 <!-- Height -->
2903 <div class="form-group">
2904 <label class="col-md-4 control-label" for="ai_image_height"><?php esc_html_e('Height', 'autowp'); ?></label>
2905 <div class="col-md-4">
2906 <input id="ai_image_height" name="ai_image_height" type="number" class="form-control" value="<?php
2907 if (isset(unserialize(get_option("autowp_settings"))["ai_image_height"])){
2908 echo esc_html(unserialize(get_option("autowp_settings"))["ai_image_height"]);
2909 }else{
2910 echo '0';
2911 }
2912 ?>" placeholder="Enter height">
2913 <br><p class="help-block"><?php esc_html_e('If you want to resize the images you can enter a value here. If you do not enter a value here the images will remain in their original size.', 'autowp'); ?></p>
2914 </div>
2915 </div>
2916
2917
2918 <!-- Watermark Link -->
2919 <div class="form-group">
2920 <label class="col-md-4 control-label" for="watermark_link"><?php esc_html_e('Watermark Link', 'autowp'); ?></label>
2921 <div class="col-md-4">
2922 <input id="watermark_link" name="watermark_link" type="text" class="form-control" value="<?php echo esc_html(unserialize(get_option("autowp_settings"))["watermark_link"]) ?>" placeholder="<?php esc_html_e('Enter the watermark link for post cover images', 'autowp'); ?>">
2923 <p class="help-block"><?php esc_html_e('Leave it empty if you do not want to add a watermark.', 'autowp'); ?></p>
2924 </div>
2925 </div>
2926
2927
2928 <legend><?php esc_html_e('Social Media Settings', 'autowp'); ?></legend>
2929
2930 <!-- Social Media Status -->
2931 <div class="form-group">
2932 <label class="col-md-4 control-label" for="social_media_status"><?php esc_html_e('Social Media Sharing Status', 'autowp'); ?></label>
2933 <div class="col-md-4">
2934 <label class="radio-inline">
2935 <input type="radio" name="social_media_status" value="1" <?php if (unserialize(get_option("autowp_settings"))["social_media_status"] === '1') { echo 'checked'; } ?>>
2936 <?php esc_html_e('Active', 'autowp'); ?>
2937 </label>
2938 <label class="radio-inline">
2939 <input type="radio" name="social_media_status" value="0" <?php if (unserialize(get_option("autowp_settings"))["social_media_status"] !== '1') { echo 'checked'; } ?>>
2940 <?php esc_html_e('Inactive', 'autowp'); ?>
2941 </label>
2942 <p class="help-block"><?php esc_html_e('Enable or disable social media sharing globally for your posts.', 'autowp'); ?></p>
2943 </div>
2944 </div>
2945
2946
2947 <!-- Twitter API Key -->
2948 <div class="form-group">
2949 <label class="col-md-4 control-label" for="twitter_api_key"><?php esc_html_e('Twitter API Key', 'autowp'); ?></label>
2950 <div class="col-md-4">
2951 <input id="twitter_api_key" name="twitter_api_key" type="text" class="form-control" value="<?php echo esc_attr(unserialize(get_option("autowp_settings"))["twitter_api_key"]); ?>" placeholder="<?php esc_html_e('Enter your Twitter API key', 'autowp'); ?>">
2952 <p class="help-block"><?php esc_html_e('IMPORTANT! Obtain your Twitter API key from https://developer.twitter.com/en/apps.', 'autowp'); ?></p>
2953 </div>
2954 </div>
2955
2956 <!-- Telegram API Key -->
2957 <div class="form-group">
2958 <label class="col-md-4 control-label" for="telegram_api_key"><?php esc_html_e('Telegram API Key', 'autowp'); ?></label>
2959 <div class="col-md-4">
2960 <input id="telegram_api_key" name="telegram_api_key" type="text" class="form-control" value="<?php echo esc_attr(unserialize(get_option("autowp_settings"))["telegram_api_key"]); ?>" placeholder="<?php esc_html_e('Enter your Telegram API key', 'autowp'); ?>">
2961 <p class="help-block"><?php esc_html_e('IMPORTANT! Obtain your Telegram API key by creating a bot through BotFather: https://core.telegram.org/bots.', 'autowp'); ?></p>
2962 </div>
2963 </div>
2964
2965 <!-- Instagram API Key -->
2966 <div class="form-group">
2967 <label class="col-md-4 control-label" for="instagram_api_key"><?php esc_html_e('Instagram API Key', 'autowp'); ?></label>
2968 <div class="col-md-4">
2969 <input id="instagram_api_key" name="instagram_api_key" type="text" class="form-control" value="<?php echo esc_attr(unserialize(get_option("autowp_settings"))["instagram_api_key"]); ?>" placeholder="<?php esc_html_e('Enter your Instagram API key', 'autowp'); ?>">
2970 <p class="help-block"><?php esc_html_e('IMPORTANT! Obtain your Instagram API key by registering an app on the Meta for Developers platform: https://developers.facebook.com.', 'autowp'); ?></p>
2971 </div>
2972 </div>
2973
2974
2975
2976
2977 <!-- Button -->
2978 <div class="form-group">
2979 <label class="col-md-4 control-label" for="singlebutton"></label>
2980 <div class="col-md-4">
2981 <button id="singlebutton" name="singlebutton" class="btn btn-primary"><?php esc_html_e('Save', 'autowp'); ?></button>
2982 </div>
2983 </div>
2984 </fieldset>
2985 </form>
2986
2987
2988 <?php
2989 }
2990
2991 function autowp_show_alert_with_message($isSuccess,$message) {
2992 if ($isSuccess) {
2993 $alertType = "success";
2994 } else {
2995 $alertType = "danger";
2996 }
2997
2998 echo '<div class="alert alert-' . esc_html($alertType) . ' alert-dismissible fade show" role="alert">';
2999 echo esc_html($message);
3000 echo '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>';
3001 echo '</div>';
3002 }
3003
3004
3005 // Register AJAX action for triggering cron
3006 add_action('wp_ajax_autowp_trigger_cron_now', 'autowp_trigger_cron_now');
3007
3008 function autowp_trigger_cron_now() {
3009 // Check if the user has the correct capabilities
3010 if (!current_user_can('manage_options')) {
3011 wp_send_json_error(array('message' => __('Unauthorized', 'autowp')));
3012 }
3013
3014 // Attempt to run the cron job immediately
3015 if (wp_unschedule_event(time(), 'autowp_cron')) {
3016 // Schedule it now
3017 wp_schedule_single_event(time(), 'autowp_cron');
3018
3019 // Get the next cron time
3020 $next_cron_time = wp_next_scheduled('autowp_cron');
3021 $next_cron_time_formatted = $next_cron_time ? date_i18n('Y-m-d H:i:s', $next_cron_time) : __('No scheduled cron event found', 'autowp');
3022
3023 wp_send_json_success(array('message' => __('Cron triggered successfully!', 'autowp'), 'next_cron_time' => $next_cron_time_formatted));
3024 } else {
3025 wp_send_json_error(array('message' => __('Failed to trigger cron.', 'autowp')));
3026 }
3027 }
3028
3029
3030
3031 function autowp_manual_post_rss_form_page_setOptions($form_data){
3032
3033
3034
3035
3036
3037
3038 $autowp_admin_email = autowp_get_admin_email();
3039 $autowp_domain_name = esc_url(get_site_url());
3040 $website_domainname = sanitize_url($form_data['domain_name']);
3041 $website_categories = '1,2,3';
3042 $post_count = 5;
3043 $post_order = sanitize_text_field($form_data['post_order']);
3044 $post_ids = '';
3045 $title_prompt = sanitize_text_field($form_data['title_prompt']);
3046 $content_prompt = sanitize_text_field($form_data['content_prompt']);
3047 $tags_prompt = sanitize_text_field($form_data['tags_prompt']);
3048 $image_prompt = sanitize_text_field($form_data['image_prompt']);
3049
3050 $image_generating_status = sanitize_text_field($form_data['image_generating_status']);
3051
3052 $author_selection = sanitize_text_field($form_data['author_selection']) ?? 1;
3053
3054
3055 $aigenerated_title = '0';
3056 $aigenerated_content = '0';
3057 $aigenerated_tags = '0';
3058 $aigenerated_image = '0';
3059
3060 if(isset($form_data['aigenerated_title'])){
3061 $aigenerated_title = sanitize_text_field($form_data['aigenerated_title']);
3062 }
3063
3064 if(isset($form_data['aigenerated_content'])){
3065 $aigenerated_content = sanitize_text_field($form_data['aigenerated_content']);
3066 }
3067
3068 if(isset($form_data['aigenerated_tags'])){
3069 $aigenerated_tags = sanitize_text_field($form_data['aigenerated_tags']);
3070 }
3071
3072 if(isset($form_data['aigenerated_image'])){
3073 $aigenerated_image = sanitize_text_field($form_data['aigenerated_image']);
3074 }
3075
3076
3077
3078
3079 $source_type = 'rss';
3080
3081
3082 $wordpress_categories = isset($form_data['category_id']) ? array_map('intval', $form_data['category_id']) : array();
3083
3084 $image_generating_status = sanitize_text_field($form_data['image_generating_status']);
3085
3086 $prompts_option = get_option('autowp_rewriting_promptscheme');
3087 $prompt_option_str = strval($prompts_option);
3088 $rewriting_prompt_scheme = [];
3089
3090 if (!empty($prompts_option)) {
3091 $rewriting_prompt_scheme = json_encode($prompts_option);
3092
3093 // JSON'dan diziye dönüşüm yapılıyor ve true ile birlikte kullanıldığı için asosiyatif dizi elde ediliyor
3094 }
3095
3096
3097 $image_settings = unserialize(get_option('autowp_settings'));
3098 $image_settings_json = [];
3099
3100 if(!empty($image_settings)){
3101 $image_settings_json = json_encode($image_settings);
3102 }
3103
3104
3105
3106 $user_email = autowp_get_user_email_from_settings();
3107
3108 $get_data_from_api = autowp_get_posts_from_wp_website($autowp_domain_name, $user_email, $website_domainname, $website_categories, $post_count,$post_order,$post_ids,$title_prompt,$content_prompt,$tags_prompt,$image_prompt,$aigenerated_title,$aigenerated_content,$aigenerated_tags,$aigenerated_image,$image_settings_json,$source_type,$image_generating_status,$prompt_option_str);
3109
3110
3111 $wp_posts = $get_data_from_api['autowp-api'];
3112
3113
3114 if($get_data_from_api['error']){
3115 update_option('autowp_alerts', $get_data_from_api['error']);
3116
3117 }else{
3118 update_option('autowp_alerts', '');
3119 if(!empty($wp_posts)){
3120 // autowp_show_alert_with_message(true,'Success!');
3121 }else{
3122 // autowp_show_alert_with_message(false,'There is no new post from your feed url!');
3123 update_option('autowp_alerts', 'There is no new post from your feed url!');
3124 }
3125 }
3126
3127
3128
3129 foreach($wp_posts as $post){
3130
3131 $post_ids = $post_ids . ',' . $post['post_id'];
3132 $post_title = $post['post_title'];
3133 $post_content = $post['content'];
3134 $post_featured_image = $post['preview_image_original'];
3135 $post_tags = $post['tags'];
3136 $post_status = $image_settings['post_status'] ?? 'publish';
3137 $post_author = $author_selection;
3138 $post_type = 'post';
3139 $focus_keyword = $post['focus_keyword'];
3140 $faq_schema = $post['faq_schema'];
3141
3142 autowp_set_new_post($post_title,$post_content,$post_status,$post_author,$post_type,$post_featured_image, $wordpress_categories,$post_tags,$focus_keyword,$faq_schema);
3143
3144 }
3145
3146 autowp_update_published_post_ids($post_ids);
3147
3148
3149
3150
3151 }
3152
3153 function schedule_autowp_manual_post_rss_event($form_data) {
3154 // Calculate the timestamp for, let's say, 5 minutes from now
3155 $timestamp = time() + 2;
3156
3157 // Schedule the event and pass form data as parameters
3158 wp_schedule_single_event($timestamp, 'autowp_manual_post_rss_event', array($form_data));
3159 }
3160
3161 // Hook this function to run when the form is submitted
3162 add_action('init', 'schedule_autowp_manual_post_rss_event');
3163
3164
3165
3166
3167 function autowp_manual_post_wp_form_page_setOptions($form_data){
3168
3169
3170 $autowp_admin_email = autowp_get_admin_email();
3171 $autowp_domain_name = esc_url(get_site_url());
3172 $website_domainname = sanitize_url($form_data['domain_name']);
3173 $website_categories = implode(",", array_map('sanitize_text_field', $form_data['website_category_id']));
3174 $post_count = 5;
3175 $post_order = sanitize_text_field($form_data['post_order']);
3176 $post_ids = '';
3177 $title_prompt = sanitize_text_field($form_data['title_prompt']);
3178 $content_prompt = sanitize_text_field($form_data['content_prompt']);
3179 $tags_prompt = sanitize_text_field($form_data['tags_prompt']);
3180 $image_prompt = sanitize_text_field($form_data['image_prompt']);
3181
3182 $author_selection = sanitize_text_field($form_data['author_selection']) ?? 1;
3183
3184 $aigenerated_title = '0';
3185 $aigenerated_content = '0';
3186 $aigenerated_tags = '0';
3187 $aigenerated_image = '0';
3188
3189 if(isset($form_data['aigenerated_title'])){
3190 $aigenerated_title = sanitize_text_field($form_data['aigenerated_title']);
3191 }
3192
3193 if(isset($form_data['aigenerated_content'])){
3194 $aigenerated_content = sanitize_text_field($form_data['aigenerated_content']);
3195 }
3196
3197 if(isset($form_data['aigenerated_tags'])){
3198 $aigenerated_tags = sanitize_text_field($form_data['aigenerated_tags']);
3199 }
3200
3201 if(isset($form_data['aigenerated_image'])){
3202 $aigenerated_image = sanitize_text_field($form_data['aigenerated_image']);
3203 }
3204
3205
3206 $image_settings = unserialize(get_option('autowp_settings'));
3207 $image_settings_json = [];
3208
3209 if(!empty($image_settings)){
3210 $image_settings_json = json_encode($image_settings);
3211 }
3212
3213
3214
3215
3216 $source_type = 'wordpress';
3217
3218
3219 $wordpress_categories = isset($form_data['category_id']) ? array_map('intval', $form_data['category_id']) : array();
3220
3221 $image_generating_status = sanitize_text_field($form_data['image_generating_status']);
3222
3223 $prompts_option = get_option('autowp_rewriting_promptscheme');
3224 $prompt_option_str = strval($prompts_option);
3225 $rewriting_prompt_scheme = [];
3226
3227 if (!empty($prompts_option)) {
3228 $rewriting_prompt_scheme = json_encode($prompts_option);
3229
3230 // JSON'dan diziye dönüşüm yapılıyor ve true ile birlikte kullanıldığı için asosiyatif dizi elde ediliyor
3231 }
3232
3233 $user_email = autowp_get_user_email_from_settings();
3234
3235 $get_data_from_api = autowp_get_posts_from_wp_website($autowp_domain_name, $user_email, $website_domainname, $website_categories, $post_count,$post_order,$post_ids,$title_prompt,$content_prompt,$tags_prompt,$image_prompt,$aigenerated_title,$aigenerated_content,$aigenerated_tags,$aigenerated_image,$image_settings_json,$source_type,$image_generating_status,$prompt_option_str);
3236 $wp_posts = $get_data_from_api['autowp-api'];
3237
3238
3239
3240
3241 if($get_data_from_api['error']){
3242 update_option('autowp_alerts', $get_data_from_api['error']);
3243
3244 }else{
3245 update_option('autowp_alerts', '');
3246 if(!empty($wp_posts)){
3247 // autowp_show_alert_with_message(true,'Success!');
3248 }else{
3249 // autowp_show_alert_with_message(false,'There is no new post from your feed url!');
3250 update_option('autowp_alerts', 'There is no new post from your feed url!');
3251 }
3252 }
3253
3254
3255
3256
3257 foreach($wp_posts as $post){
3258
3259 $post_ids = $post_ids . ',' . $post['post_id'] . $post['slug'];
3260 $post_title = $post['post_title'];
3261 $post_content = $post['content'];
3262 $post_featured_image = $post['preview_image_original'];
3263 $post_tags = $post['tags'];
3264 $post_status = $image_settings['post_status'] ?? 'publish';
3265 $post_author = $author_selection;
3266 $post_type = 'post';
3267 $focus_keyword = $post['focus_keyword'];
3268 $faq_schema = $post['faq_schema'];
3269
3270
3271 autowp_set_new_post($post_title,$post_content,$post_status,$post_author,$post_type,$post_featured_image, $wordpress_categories,$post_tags,$focus_keyword,$faq_schema);
3272
3273
3274 }
3275
3276 autowp_update_published_post_ids($post_ids);
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286 }
3287
3288 function autowp_manual_post_news_form_page_setOptions($form_data){
3289
3290
3291 $autowp_admin_email = autowp_get_admin_email();
3292 $autowp_domain_name = esc_url(get_site_url());
3293 $website_domainname = sanitize_url($form_data['domain_name']);
3294 $website_categories = '1,2,3';
3295 $post_count = 5;
3296 $post_order = sanitize_text_field($form_data['post_order']);
3297 $post_ids = '';
3298 $title_prompt = sanitize_text_field($form_data['title_prompt']);
3299 $content_prompt = sanitize_text_field($form_data['content_prompt']);
3300 $tags_prompt = sanitize_text_field($form_data['tags_prompt']);
3301 $image_prompt = sanitize_text_field($form_data['image_prompt']);
3302
3303 $author_selection = sanitize_text_field($form_data['author_selection']) ?? 1;
3304
3305 $aigenerated_title = '0';
3306 $aigenerated_content = '0';
3307 $aigenerated_tags = '0';
3308 $aigenerated_image = '0';
3309
3310 if(isset($form_data['aigenerated_title'])){
3311 $aigenerated_title = sanitize_text_field($form_data['aigenerated_title']);
3312 }
3313
3314 if(isset($form_data['aigenerated_content'])){
3315 $aigenerated_content = sanitize_text_field($form_data['aigenerated_content']);
3316 }
3317
3318 if(isset($form_data['aigenerated_tags'])){
3319 $aigenerated_tags = sanitize_text_field($form_data['aigenerated_tags']);
3320 }
3321
3322 if(isset($form_data['aigenerated_image'])){
3323 $aigenerated_image = sanitize_text_field($form_data['aigenerated_image']);
3324 }
3325
3326
3327 $image_settings = unserialize(get_option('autowp_settings'));
3328 $image_settings_json = [];
3329
3330 if(!empty($image_settings)){
3331 $image_settings_json = json_encode($image_settings);
3332 }
3333
3334
3335
3336
3337 $source_type = 'news';
3338
3339
3340 $wordpress_categories = isset($form_data['category_id']) ? array_map('intval', $form_data['category_id']) : array();
3341
3342 $image_generating_status = sanitize_text_field($form_data['image_generating_status']);
3343
3344
3345
3346 $news_keyword = sanitize_text_field($form_data['news_keyword']); // New field for News website
3347 $news_country = sanitize_text_field($form_data['news_country']);
3348 $news_language = sanitize_text_field($form_data['news_language']);
3349 $news_time_published = sanitize_text_field($form_data['news_time_published']);
3350
3351 $prompts_option = get_option('autowp_rewriting_promptscheme');
3352 $prompt_option_str = strval($prompts_option);
3353 $rewriting_prompt_scheme = [];
3354
3355 if (!empty($prompts_option)) {
3356 $rewriting_prompt_scheme = json_encode($prompts_option);
3357
3358 // JSON'dan diziye dönüşüm yapılıyor ve true ile birlikte kullanıldığı için asosiyatif dizi elde ediliyor
3359 }
3360
3361 $user_email = autowp_get_user_email_from_settings();
3362
3363
3364 $get_data_from_api = autowp_get_posts_from_wp_website($autowp_domain_name, $user_email, $website_domainname, $website_categories, $post_count,$post_order,$post_ids,$title_prompt,$content_prompt,$tags_prompt,$image_prompt,$aigenerated_title,$aigenerated_content,$aigenerated_tags,$aigenerated_image,$image_settings_json,$source_type,$image_generating_status,$news_keyword,$news_country,$news_language,$news_time_published,$prompt_option_str);
3365 $wp_posts = $get_data_from_api['autowp-api'];
3366
3367
3368
3369
3370 if($get_data_from_api['error']){
3371 update_option('autowp_alerts', $get_data_from_api['error']);
3372
3373 }else{
3374 update_option('autowp_alerts', '');
3375 if(!empty($wp_posts)){
3376 // autowp_show_alert_with_message(true,'Success!');
3377 }else{
3378 // autowp_show_alert_with_message(false,'There is no new post from your feed url!');
3379 update_option('autowp_alerts', 'There is no new post from your feed url!');
3380 }
3381 }
3382
3383
3384
3385
3386 foreach($wp_posts as $post){
3387
3388 $post_ids = $post_ids . ',' . $post['post_id'] . $post['slug'];
3389 $post_title = $post['post_title'];
3390 $post_content = $post['content'];
3391 $post_featured_image = $post['preview_image_original'];
3392 $post_tags = $post['tags'];
3393 $post_status = $image_settings['post_status'] ?? 'publish';
3394 $post_author = $author_selection;
3395 $post_type = 'post';
3396 $focus_keyword = $post['focus_keyword'];
3397 $faq_schema = $post['faq_schema'];
3398
3399
3400 autowp_set_new_post($post_title,$post_content,$post_status,$post_author,$post_type,$post_featured_image, $wordpress_categories,$post_tags,$focus_keyword,$faq_schema);
3401
3402
3403 }
3404
3405 autowp_update_published_post_ids($post_ids);
3406
3407
3408
3409
3410
3411
3412
3413 }
3414
3415
3416
3417
3418 function autowp_manual_post_news_form_page_handler(){
3419 //autowp_manual_post_news_form_page_setOptions();
3420
3421 if (isset($_POST['_wpnonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['_wpnonce'])), 'autowp_manual_post_news_nonce')) {
3422
3423 $form_data = $_POST;
3424
3425 $form_data['website_type'] = 'news';
3426
3427 $form_data['content_prompt'] = '[autowp-rewriting-promptcode]' .
3428 sanitize_text_field($form_data['languageSelect']) . ',' .
3429 sanitize_text_field($form_data['subtitleSelect']) . ',' .
3430 sanitize_text_field($form_data['narrationSelect']) .
3431 '[/autowp-rewriting-promptcode]';
3432
3433 $validate_form = autowp_validate_website($form_data,true);
3434
3435
3436
3437 if($validate_form === true){
3438 autowp_show_alert_with_message(true,'Your process successfully started!');
3439 schedule_autowp_manual_post_rss_event($form_data);
3440 }else{
3441
3442
3443 autowp_show_alert_with_message(false,$validate_form);
3444
3445 }
3446
3447
3448
3449
3450 }
3451
3452 ?>
3453 <div class="wrap">
3454 <h1>Manual Post - News</h1>
3455 <a href="javascript:history.back()" class="btn btn-primary">Go Back</a>
3456
3457 <div id="poststuff">
3458 <div id="post-body" class="metabox-holder columns-2">
3459 <!-- Main Content -->
3460 <div id="post-body-content">
3461 <div class="meta-box-sortables ui-sortable">
3462 <div class="postbox">
3463 <h2 class="hndle ui-sortable-handle">Manual News Settings</h2>
3464 <div class="inside">
3465 <div id="loading">
3466 <div class="loader">
3467 <div class="inner one"></div>
3468 <div class="inner two"></div>
3469 <div class="inner three"></div>
3470 </div>
3471 </div>
3472 <form id="autowp_manual_post_form" method="post">
3473 <?php wp_nonce_field('autowp_manual_post_news_nonce', '_wpnonce'); ?>
3474
3475 <div class="form2bc">
3476 <div class="container">
3477 <form class="row g-3" id="post_generation_form">
3478 <div class="col-md-6">
3479 <label for="website_name" class="form-label">Name:</label>
3480 <input id="website_name" name="website_name" type="text" value="" class="form-control" required>
3481 </div>
3482 <div class="col-md-6">
3483 <label class="form-label" for="author_selection">Author Selection:</label>
3484 <select name="author_selection" id="author_selection" class="form-select">
3485 <?php
3486 $authors = get_users();
3487
3488 foreach ($authors as $author) {
3489 $author_id = $author->ID;
3490 $author_name = $author->display_name;
3491
3492 echo '<option value="' . esc_attr($author_id) . '">' . esc_html($author_name) . '</option>';
3493 }
3494 ?>
3495 </select>
3496 </div>
3497
3498 <div class="col-md-6">
3499 <label for="category_id" class="form-label">Categories:</label>
3500 <select id="category_id" name="category_id[]" class="form-select" required multiple>
3501 <?php
3502
3503
3504 $categories = get_categories(array(
3505 'orderby' => 'name',
3506 'order' => 'ASC',
3507 'hide_empty' => false
3508 ));
3509
3510 foreach ($categories as $category) {
3511
3512 echo '<option value="' . esc_attr($category->term_id) . '">' . esc_html($category->name) . '</option>';
3513 }
3514 ?>
3515 </select>
3516 </div>
3517
3518 <div class="col-md-6">
3519 <label for="news_keyword" class="form-label">Keyword:</label>
3520 <input id="news_keyword" name="news_keyword" type="text" value="" class="form-control">
3521 </div>
3522
3523 <div class="col-md-6">
3524 <label class="form-label" for="news_country">News Country:</label>
3525 <select name="news_country" class="form-select">
3526 <!-- ISO 3166-1 alpha-2 country codes -->
3527 <!-- Replace with actual country codes and names -->
3528 <?php
3529 $countries = [
3530 'any' => 'Anywhere',
3531 'AF' => 'Afghanistan',
3532 'AX' => '�
3533 land Islands',
3534 'AL' => 'Albania',
3535 'DZ' => 'Algeria',
3536 'AS' => 'American Samoa',
3537 'AD' => 'Andorra',
3538 'AO' => 'Angola',
3539 'AI' => 'Anguilla',
3540 'AQ' => 'Antarctica',
3541 'AG' => 'Antigua and Barbuda',
3542 'AR' => 'Argentina',
3543 'AM' => 'Armenia',
3544 'AW' => 'Aruba',
3545 'AU' => 'Australia',
3546 'AT' => 'Austria',
3547 'AZ' => 'Azerbaijan',
3548 'BS' => 'Bahamas',
3549 'BH' => 'Bahrain',
3550 'BD' => 'Bangladesh',
3551 'BB' => 'Barbados',
3552 'BY' => 'Belarus',
3553 'BE' => 'Belgium',
3554 'BZ' => 'Belize',
3555 'BJ' => 'Benin',
3556 'BM' => 'Bermuda',
3557 'BT' => 'Bhutan',
3558 'BO' => 'Bolivia, Plurinational State of',
3559 'BQ' => 'Bonaire, Sint Eustatius and Saba',
3560 'BA' => 'Bosnia and Herzegovina',
3561 'BW' => 'Botswana',
3562 'BV' => 'Bouvet Island',
3563 'BR' => 'Brazil',
3564 'IO' => 'British Indian Ocean Territory',
3565 'BN' => 'Brunei Darussalam',
3566 'BG' => 'Bulgaria',
3567 'BF' => 'Burkina Faso',
3568 'BI' => 'Burundi',
3569 'KH' => 'Cambodia',
3570 'CM' => 'Cameroon',
3571 'CA' => 'Canada',
3572 'CV' => 'Cape Verde',
3573 'KY' => 'Cayman Islands',
3574 'CF' => 'Central African Republic',
3575 'TD' => 'Chad',
3576 'CL' => 'Chile',
3577 'CN' => 'China',
3578 'CX' => 'Christmas Island',
3579 'CC' => 'Cocos (Keeling) Islands',
3580 'CO' => 'Colombia',
3581 'KM' => 'Comoros',
3582 'CG' => 'Congo',
3583 'CD' => 'Congo, the Democratic Republic of the',
3584 'CK' => 'Cook Islands',
3585 'CR' => 'Costa Rica',
3586 'CI' => "Côte d'Ivoire",
3587 'HR' => 'Croatia',
3588 'CU' => 'Cuba',
3589 'CW' => 'Curaçao',
3590 'CY' => 'Cyprus',
3591 'CZ' => 'Czech Republic',
3592 'DK' => 'Denmark',
3593 'DJ' => 'Djibouti',
3594 'DM' => 'Dominica',
3595 'DO' => 'Dominican Republic',
3596 'EC' => 'Ecuador',
3597 'EG' => 'Egypt',
3598 'SV' => 'El Salvador',
3599 'GQ' => 'Equatorial Guinea',
3600 'ER' => 'Eritrea',
3601 'EE' => 'Estonia',
3602 'ET' => 'Ethiopia',
3603 'FK' => 'Falkland Islands (Malvinas)',
3604 'FO' => 'Faroe Islands',
3605 'FJ' => 'Fiji',
3606 'FI' => 'Finland',
3607 'FR' => 'France',
3608 'GF' => 'French Guiana',
3609 'PF' => 'French Polynesia',
3610 'TF' => 'French Southern Territories',
3611 'GA' => 'Gabon',
3612 'GM' => 'Gambia',
3613 'GE' => 'Georgia',
3614 'DE' => 'Germany',
3615 'GH' => 'Ghana',
3616 'GI' => 'Gibraltar',
3617 'GR' => 'Greece',
3618 'GL' => 'Greenland',
3619 'GD' => 'Grenada',
3620 'GP' => 'Guadeloupe',
3621 'GU' => 'Guam',
3622 'GT' => 'Guatemala',
3623 'GG' => 'Guernsey',
3624 'GN' => 'Guinea',
3625 'GW' => 'Guinea-Bissau',
3626 'GY' => 'Guyana',
3627 'HT' => 'Haiti',
3628 'HM' => 'Heard Island and McDonald Islands',
3629 'VA' => 'Holy See (Vatican City State)',
3630 'HN' => 'Honduras',
3631 'HK' => 'Hong Kong',
3632 'HU' => 'Hungary',
3633 'IS' => 'Iceland',
3634 'IN' => 'India',
3635 'ID' => 'Indonesia',
3636 'IR' => 'Iran, Islamic Republic of',
3637 'IQ' => 'Iraq',
3638 'IE' => 'Ireland',
3639 'IM' => 'Isle of Man',
3640 'IL' => 'Israel',
3641 'IT' => 'Italy',
3642 'JM' => 'Jamaica',
3643 'JP' => 'Japan',
3644 'JE' => 'Jersey',
3645 'JO' => 'Jordan',
3646 'KZ' => 'Kazakhstan',
3647 'KE' => 'Kenya',
3648 'KI' => 'Kiribati',
3649 'KP' => "Korea, Democratic People's Republic of",
3650 'KR' => 'Korea, Republic of',
3651 'KW' => 'Kuwait',
3652 'KG' => 'Kyrgyzstan',
3653 'LA' => "Lao People's Democratic Republic",
3654 'LV' => 'Latvia',
3655 'LB' => 'Lebanon',
3656 'LS' => 'Lesotho',
3657 'LR' => 'Liberia',
3658 'LY' => 'Libya',
3659 'LI' => 'Liechtenstein',
3660 'LT' => 'Lithuania',
3661 'LU' => 'Luxembourg',
3662 'MO' => 'Macao',
3663 'MK' => 'Macedonia, The Former Yugoslav Republic of',
3664 'MG' => 'Madagascar',
3665 'MW' => 'Malawi',
3666 'MY' => 'Malaysia',
3667 'MV' => 'Maldives',
3668 'ML' => 'Mali',
3669 'MT' => 'Malta',
3670 'MH' => 'Marshall Islands',
3671 'MQ' => 'Martinique',
3672 'MR' => 'Mauritania',
3673 'MU' => 'Mauritius',
3674 'YT' => 'Mayotte',
3675 'MX' => 'Mexico',
3676 'FM' => 'Micronesia, Federated States of',
3677 'MD' => 'Moldova, Republic of',
3678 'MC' => 'Monaco',
3679 'MN' => 'Mongolia',
3680 'ME' => 'Montenegro',
3681 'MS' => 'Montserrat',
3682 'MA' => 'Morocco',
3683 'MZ' => 'Mozambique',
3684 'MM' => 'Myanmar',
3685 'NA' => 'Namibia',
3686 'NR' => 'Nauru',
3687 'NP' => 'Nepal',
3688 'NL' => 'Netherlands',
3689 'NC' => 'New Caledonia',
3690 'NZ' => 'New Zealand',
3691 'NI' => 'Nicaragua',
3692 'NE' => 'Niger',
3693 'NG' => 'Nigeria',
3694 'NU' => 'Niue',
3695 'NF' => 'Norfolk Island',
3696 'MP' => 'Northern Mariana Islands',
3697 'NO' => 'Norway',
3698 'OM' => 'Oman',
3699 'PK' => 'Pakistan',
3700 'PW' => 'Palau',
3701 'PS' => 'Palestinian Territory, Occupied',
3702 'PA' => 'Panama',
3703 'PG' => 'Papua New Guinea',
3704 'PY' => 'Paraguay',
3705 'PE' => 'Peru',
3706 'PH' => 'Philippines',
3707 'PN' => 'Pitcairn',
3708 'PL' => 'Poland',
3709 'PT' => 'Portugal',
3710 'PR' => 'Puerto Rico',
3711 'QA' => 'Qatar',
3712 'RE' => 'Réunion',
3713 'RO' => 'Romania',
3714 'RU' => 'Russian Federation',
3715 'RW' => 'Rwanda',
3716 'BL' => 'Saint Barthélemy',
3717 'SH' => 'Saint Helena, Ascension and Tristan da Cunha',
3718 'KN' => 'Saint Kitts and Nevis',
3719 'LC' => 'Saint Lucia',
3720 'MF' => 'Saint Martin (French part)',
3721 'PM' => 'Saint Pierre and Miquelon',
3722 'VC' => 'Saint Vincent and the Grenadines',
3723 'WS' => 'Samoa',
3724 'SM' => 'San Marino',
3725 'ST' => 'Sao Tome and Principe',
3726 'SA' => 'Saudi Arabia',
3727 'SN' => 'Senegal',
3728 'RS' => 'Serbia',
3729 'SC' => 'Seychelles',
3730 'SL' => 'Sierra Leone',
3731 'SG' => 'Singapore',
3732 'SX' => 'Sint Maarten (Dutch part)',
3733 'SK' => 'Slovakia',
3734 'SI' => 'Slovenia',
3735 'SB' => 'Solomon Islands',
3736 'SO' => 'Somalia',
3737 'ZA' => 'South Africa',
3738 'GS' => 'South Georgia and the South Sandwich Islands',
3739 'SS' => 'South Sudan',
3740 'ES' => 'Spain',
3741 'LK' => 'Sri Lanka',
3742 'SD' => 'Sudan',
3743 'SR' => 'Suriname',
3744 'SJ' => 'Svalbard and Jan Mayen',
3745 'SZ' => 'Swaziland',
3746 'SE' => 'Sweden',
3747 'CH' => 'Switzerland',
3748 'SY' => 'Syrian Arab Republic',
3749 'TW' => 'Taiwan, Province of China',
3750 'TJ' => 'Tajikistan',
3751 'TZ' => 'Tanzania, United Republic of',
3752 'TH' => 'Thailand',
3753 'TL' => 'Timor-Leste',
3754 'TG' => 'Togo',
3755 'TK' => 'Tokelau',
3756 'TO' => 'Tonga',
3757 'TT' => 'Trinidad and Tobago',
3758 'TN' => 'Tunisia',
3759 'TR' => 'Turkey',
3760 'TM' => 'Turkmenistan',
3761 'TC' => 'Turks and Caicos Islands',
3762 'TV' => 'Tuvalu',
3763 'UG' => 'Uganda',
3764 'UA' => 'Ukraine',
3765 'AE' => 'United Arab Emirates',
3766 'GB' => 'United Kingdom',
3767 'US' => 'United States',
3768 'UM' => 'United States Minor Outlying Islands',
3769 'UY' => 'Uruguay',
3770 'UZ' => 'Uzbekistan',
3771 'VU' => 'Vanuatu',
3772 'VE' => 'Venezuela, Bolivarian Republic of',
3773 'VN' => 'Viet Nam',
3774 'VG' => 'Virgin Islands, British',
3775 'VI' => 'Virgin Islands, U.S.',
3776 'WF' => 'Wallis and Futuna',
3777 'EH' => 'Western Sahara',
3778 'YE' => 'Yemen',
3779 'ZM' => 'Zambia',
3780 'ZW' => 'Zimbabwe',
3781 ];
3782
3783 foreach ($countries as $code => $name) {
3784
3785 echo '<option value="' . esc_attr($code) . '">' . esc_html($name) . '</option>';
3786 }
3787 ?>
3788 </select>
3789 </div>
3790
3791
3792 <div class="col-md-6">
3793 <label class="form-label" for="news_language">Language:</label>
3794 <select name="news_language" class="form-select">
3795 <!-- ISO 639-1 alpha-2 language codes -->
3796 <!-- Replace with actual language codes and names -->
3797 <?php
3798 $languages = [
3799 'any' => 'Any Language',
3800 'af' => 'Afrikaans',
3801 'sq' => 'Albanian',
3802 'am' => 'Amharic',
3803 'ar' => 'Arabic',
3804 'hy' => 'Armenian',
3805 'az' => 'Azerbaijani',
3806 'eu' => 'Basque',
3807 'be' => 'Belarusian',
3808 'bn' => 'Bengali',
3809 'bs' => 'Bosnian',
3810 'bg' => 'Bulgarian',
3811 'ca' => 'Catalan',
3812 'ceb' => 'Cebuano',
3813 'ny' => 'Chichewa',
3814 'zh-CN' => 'Chinese',
3815 'co' => 'Corsican',
3816 'hr' => 'Croatian',
3817 'cs' => 'Czech',
3818 'da' => 'Danish',
3819 'nl' => 'Dutch',
3820 'en' => 'English',
3821 'eo' => 'Esperanto',
3822 'et' => 'Estonian',
3823 'tl' => 'Filipino',
3824 'fi' => 'Finnish',
3825 'fr' => 'French',
3826 'fy' => 'Frisian',
3827 'gl' => 'Galician',
3828 'ka' => 'Georgian',
3829 'de' => 'German',
3830 'el' => 'Greek',
3831 'gu' => 'Gujarati',
3832 'ht' => 'Haitian Creole',
3833 'ha' => 'Hausa',
3834 'haw' => 'Hawaiian',
3835 'iw' => 'Hebrew',
3836 'hi' => 'Hindi',
3837 'hmn' => 'Hmong',
3838 'hu' => 'Hungarian',
3839 'is' => 'Icelandic',
3840 'ig' => 'Igbo',
3841 'id' => 'Indonesian',
3842 'ga' => 'Irish',
3843 'it' => 'Italian',
3844 'ja' => 'Japanese',
3845 'jw' => 'Javanese',
3846 'kn' => 'Kannada',
3847 'kk' => 'Kazakh',
3848 'km' => 'Khmer',
3849 'ko' => 'Korean',
3850 'ku' => 'Kurdish (Kurmanji)',
3851 'ky' => 'Kyrgyz',
3852 'lo' => 'Lao',
3853 'la' => 'Latin',
3854 'lv' => 'Latvian',
3855 'lt' => 'Lithuanian',
3856 'lb' => 'Luxembourgish',
3857 'mk' => 'Macedonian',
3858 'mg' => 'Malagasy',
3859 'ms' => 'Malay',
3860 'ml' => 'Malayalam',
3861 'mt' => 'Maltese',
3862 'mi' => 'Maori',
3863 'mr' => 'Marathi',
3864 'mn' => 'Mongolian',
3865 'my' => 'Myanmar (Burmese)',
3866 'ne' => 'Nepali',
3867 'no' => 'Norwegian',
3868 'ps' => 'Pashto',
3869 'fa' => 'Persian',
3870 'pl' => 'Polish',
3871 'pt' => 'Portuguese',
3872 'pa' => 'Punjabi',
3873 'ro' => 'Romanian',
3874 'ru' => 'Russian',
3875 'sm' => 'Samoan',
3876 'gd' => 'Scots Gaelic',
3877 'sr' => 'Serbian',
3878 'st' => 'Sesotho',
3879 'sn' => 'Shona',
3880 'sd' => 'Sindhi',
3881 'si' => 'Sinhala',
3882 'sk' => 'Slovak',
3883 'sl' => 'Slovenian',
3884 'so' => 'Somali',
3885 'es' => 'Spanish',
3886 'su' => 'Sundanese',
3887 'sw' => 'Swahili',
3888 'sv' => 'Swedish',
3889 'tg' => 'Tajik',
3890 'ta' => 'Tamil',
3891 'te' => 'Telugu',
3892 'th' => 'Thai',
3893 'tr' => 'Turkish',
3894 'uk' => 'Ukrainian',
3895 'ur' => 'Urdu',
3896 'uz' => 'Uzbek',
3897 'vi' => 'Vietnamese',
3898 'cy' => 'Welsh',
3899 'xh' => 'Xhosa',
3900 'yi' => 'Yiddish',
3901 'yo' => 'Yoruba',
3902 'zu' => 'Zulu',
3903 ];
3904
3905 foreach ($languages as $code => $name) {
3906
3907 echo '<option value="' . esc_attr($code) . '">' . esc_html($name) . '</option>';
3908 }
3909 ?>
3910 </select>
3911 </div>
3912
3913 <div class="col-md-6">
3914 <label class="form-label" for="news_time_published">Time Published:</label>
3915 <select name="news_time_published" class="form-select">
3916 <?php
3917 $time_options = [
3918 'anytime' => 'Anytime',
3919 '1h' => 'Last Hour',
3920 '1d' => 'Last Day',
3921 '7d' => 'Last 7 Days',
3922 '1y' => 'Last Year',
3923 ];
3924
3925 foreach ($time_options as $value => $label) {
3926 echo '<option value="' . esc_attr($value) . '">' . esc_html($label) . '</option>';
3927 }
3928 ?>
3929 </select>
3930 </div>
3931
3932
3933 <div class="col-md-6">
3934 <label for="domain_name" class="form-label">Source URL (optional):</label>
3935 <input id="domain_name" name="domain_name" type="text" value="" class="form-control">
3936 </div>
3937 <br>
3938 <p>If you want to get news from a specific source website, enter the site's address here. It is not mandatory to fill in this field.</p>
3939
3940
3941 <div class="col-md-6">
3942 <label class="form-label" for="image_generating_status"><?php esc_html_e('Image Generating Method', 'autowp'); ?></label>
3943 <select name="image_generating_status" class="form-select">
3944 <option value="0"><?php esc_html_e('FLUX Realism LoRA', 'autowp'); ?></option>
3945 <option value="1"><?php esc_html_e('Stable Diffusion Ultra', 'autowp'); ?></option>
3946 <option value="2"><?php esc_html_e('Stable Diffusion Core', 'autowp'); ?></option>
3947 <option value="3"><?php esc_html_e('DALL-E 2', 'autowp'); ?></option>
3948 <option value="4"><?php esc_html_e('DALL-E 3', 'autowp'); ?></option>
3949 <option value="5"><?php esc_html_e('DuckDuckGo Search', 'autowp'); ?></option>
3950
3951 <option value="6"><?php esc_html_e('Default Image', 'autowp'); ?></option>
3952 <option value="7"><?php esc_html_e('No Image', 'autowp'); ?></option>
3953 </select>
3954 <p class="form-text"><?php esc_html_e('By default FLUX Realism LoRA is selected.', 'autowp'); ?></p>
3955 </div>
3956
3957
3958 <div class="col-md-6">
3959 <label for="post_order" class="form-label">Post Order:</label>
3960 <select id="post_order" name="post_order" class="form-select">
3961 <option value="desc">Latest First</option>
3962 <option value="asc">Oldest First</option>
3963 <option value="rand">Random</option>
3964 </select>
3965 </div>
3966
3967
3968
3969
3970 <br>
3971 <h4 style="font-weight: bold;">Post Settings</h4>
3972
3973 <br>
3974
3975 <div class="col-md-6">
3976 <label for="languageSelect" class="form-label">Post Language:</label>
3977 <select class="form-select" id="languageSelect" name="languageSelect">
3978 <?php
3979 $languages = [
3980 "Afrikaans",
3981 "Albanian",
3982 "Arabic",
3983 "Armenian",
3984 "Basque",
3985 "Bengali",
3986 "Bulgarian",
3987 "Catalan",
3988 "Cambodian",
3989 "Chinese (Mandarin)",
3990 "Croatian",
3991 "Czech",
3992 "Danish",
3993 "Dutch",
3994 "English",
3995 "Estonian",
3996 "Fiji",
3997 "Finnish",
3998 "French",
3999 "Georgian",
4000 "German",
4001 "Greek",
4002 "Gujarati",
4003 "Hebrew",
4004 "Hindi",
4005 "Hungarian",
4006 "Icelandic",
4007 "Indonesian",
4008 "Irish",
4009 "Italian",
4010 "Japanese",
4011 "Javanese",
4012 "Korean",
4013 "Latin",
4014 "Latvian",
4015 "Lithuanian",
4016 "Macedonian",
4017 "Malay",
4018 "Malayalam",
4019 "Maltese",
4020 "Maori",
4021 "Marathi",
4022 "Mongolian",
4023 "Nepali",
4024 "Norwegian",
4025 "Persian",
4026 "Polish",
4027 "Portuguese",
4028 "Punjabi",
4029 "Quechua",
4030 "Romanian",
4031 "Russian",
4032 "Samoan",
4033 "Serbian",
4034 "Slovak",
4035 "Slovenian",
4036 "Spanish",
4037 "Swahili",
4038 "Swedish",
4039 "Tamil",
4040 "Tatar",
4041 "Telugu",
4042 "Thai",
4043 "Tibetan",
4044 "Tonga",
4045 "Turkish",
4046 "Ukrainian",
4047 "Urdu",
4048 "Uzbek",
4049 "Vietnamese",
4050 "Welsh",
4051 "Xhosa"
4052 ];
4053 ?>
4054 <?php foreach ($languages as $language): ?>
4055 <option value="<?php echo esc_attr($language); ?>">
4056 <?php echo esc_html($language); ?>
4057 </option>
4058 <?php endforeach; ?>
4059
4060
4061 </select>
4062 </div>
4063 <br>
4064 <div class="col-md-6">
4065 <label for="subtitleSelect" class="form-label">Subheading Count:</label>
4066 <select class="form-select" id="subtitleSelect" name="subtitleSelect">
4067 <?php
4068 for ($i = 1; $i <= 10; $i++) {
4069 echo '<option value="' . esc_attr($i) . '">' . esc_html($i) . '</option>';
4070 }
4071 ?>
4072 </select>
4073 </div>
4074 <br>
4075 <div class="col-md-6">
4076 <label for="narrationSelect" class="form-label">Writing Style:</label>
4077 <select class="form-select" id="narrationSelect" name="narrationSelect">
4078 <?php
4079 $styles = [
4080 "Descriptive" => "Descriptive",
4081 "Narrative" => "Narrative",
4082 "Explanatory" => "Explanatory",
4083 "Argumentative" => "Argumentative",
4084 "Comparative" => "Comparative",
4085 "Process Analysis" => "Process Analysis",
4086 "Allegorical" => "Allegorical",
4087 "Chronological" => "Chronological",
4088 "Ironic" => "Ironic",
4089 "ConsistencyAndRepetition" => "Consistency and Repetition",
4090 "LanguagePlayAndPoeticExpression" => "Language Play and Poetic Expression",
4091 "InternalMonologue" => "Internal Monologue",
4092 "Dialogical" => "Dialogical"
4093 ];
4094 foreach ($styles as $value => $name) {
4095 echo '<option value="' . esc_attr($value) . '">' . esc_html($name) . '</option>';
4096 }
4097 ?>
4098
4099 </select>
4100 <br>
4101 </div>
4102
4103
4104
4105 <div class="mb-3">
4106 <p class="submit">
4107 <input type="submit" name="submit" id="submit" class="btn btn-primary" value="Generate Post">
4108 </p>
4109 </div>
4110
4111 </form>
4112 </div>
4113
4114 </form>
4115 </div>
4116 </div>
4117 </div>
4118 </div>
4119 <!-- Sidebar -->
4120 <div id="postbox-container-1" class="postbox-container">
4121 <!-- Sidebar content here (if any) -->
4122 </div>
4123 </div>
4124 <br class="clear">
4125 </div>
4126 </div>
4127 <?php
4128
4129 }
4130
4131
4132 function get_next_cron_time($cron_id) {
4133 // Önce, wpcron ID'ye ait cron işleminin zamanlamasını alalım
4134 $next_cron_timestamp = wp_next_scheduled($cron_id);
4135
4136 // Eğer bir sonraki tetiklenme zamanı varsa, tarih ve saat formatında geri döndürelim
4137 if ($next_cron_timestamp) {
4138 return date('Y-m-d H:i:s', $next_cron_timestamp);
4139 } else {
4140 // Eğer bir sonraki tetiklenme zamanı yoksa, boş bir değer döndürelim veya hata durumuna göre düzenleyebilirsiniz
4141 return 'Bir sonraki tetiklenme zamanı bulunamadı.';
4142 }
4143 }
4144
4145
4146 function autowp_manual_post_wp_form_page_handler() {
4147 //autowp_manual_post_wp_form_page_setOptions();
4148
4149 if (isset($_POST['_wpnonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['_wpnonce'])), 'autowp_manual_post_wp_nonce')) {
4150
4151 $form_data = $_POST;
4152
4153 $form_data['website_type'] = 'wordpress';
4154
4155 $form_data['content_prompt'] = '[autowp-rewriting-promptcode]' .
4156 sanitize_text_field($_POST['languageSelect']) . ',' .
4157 sanitize_text_field($_POST['subtitleSelect']) . ',' .
4158 sanitize_text_field($_POST['narrationSelect']) .
4159 '[/autowp-rewriting-promptcode]';
4160
4161 $validate_form = autowp_validate_website($form_data,true);
4162
4163
4164
4165 if($validate_form === true){
4166 autowp_show_alert_with_message(true,'Your process successfully started!');
4167 schedule_autowp_manual_post_rss_event($form_data);
4168 }else{
4169
4170
4171 autowp_show_alert_with_message(false,$validate_form);
4172
4173 }
4174
4175
4176
4177
4178 }
4179
4180 ?>
4181 <div class="wrap">
4182 <h1>Manual Post - Wordpress</h1>
4183 <a href="javascript:history.back()" class="btn btn-primary">Go Back</a>
4184
4185 <div id="poststuff">
4186 <div id="post-body" class="metabox-holder columns-2">
4187 <!-- Main Content -->
4188 <div id="post-body-content">
4189 <div class="meta-box-sortables ui-sortable">
4190 <div class="postbox">
4191 <h2 class="hndle ui-sortable-handle">Wordpress Settings</h2>
4192 <div class="inside">
4193 <div id="loading">
4194 <div class="loader">
4195 <div class="inner one"></div>
4196 <div class="inner two"></div>
4197 <div class="inner three"></div>
4198 </div>
4199 </div>
4200 <form id="autowp_manual_post_form" method="post">
4201 <?php wp_nonce_field('autowp_manual_post_wp_nonce', '_wpnonce'); ?>
4202
4203 <div class="form2bc">
4204 <div class="container">
4205 <form class="row g-3" id="post_generation_form">
4206 <div class="col-md-6">
4207 <label for="website_name" class="form-label">Website Name:</label>
4208 <?php
4209 $autowp_admin_email = autowp_get_admin_email();
4210 $autowp_domain_name = esc_url(get_site_url());
4211 $is_empty = empty($item['domain_name']);
4212 ?>
4213 <input type="hidden" id="autowp_admin_email" value="<?= esc_attr($autowp_admin_email) ?>">
4214 <input type="hidden" id="autowp_domain_name" value="<?= esc_attr($autowp_domain_name) ?>">
4215 <input id="website_name" name="website_name" type="text" class="form-control" required>
4216 </div>
4217 <div class="col-md-6">
4218 <label for="domain_name" class="form-label">Domain Name:</label>
4219 <input id="domain_name" name="domain_name" type="text" class="form-control" required>
4220 </div>
4221
4222 <div class="col-md-6">
4223 <label for="author_selection" class="form-label"><?php esc_html_e('Author Selection', 'autowp'); ?></label>
4224 <select name="author_selection" class="form-select">
4225 <?php
4226 $authors = get_users();
4227 foreach ($authors as $author) {
4228 $author_id = $author->ID;
4229 $author_name = $author->display_name;
4230 $author_description = get_the_author_meta('description', $author_id);
4231 echo '<option value="' . esc_attr($author_id) . '">' . esc_html($author_name) . '</option>';
4232 }
4233 ?>
4234 </select>
4235 <p class="form-text"><?php esc_html_e('Select an author from the list.', 'autowp'); ?></p>
4236 </div>
4237
4238 <div class="col-md-6">
4239 <label for="website_category_id" class="form-label">Website Categories:</label>
4240 <br>
4241 <select id="website_category_id" name="website_category_id[]" multiple style="display: none;"></select>
4242 <button type="button" class="btn btn-primary" onclick="refreshWebsiteCategories()">
4243 <i class="bi bi-arrow-clockwise"></i>
4244 Get Categories
4245 </button>
4246 </div>
4247 <br>
4248 <div class="col-md-6">
4249 <label for="category_id" class="form-label">Categories:</label>
4250 <select id="category_id" name="category_id[]" required multiple class="form-select">
4251 <?php
4252 $categories = get_categories(array(
4253 'orderby' => 'name',
4254 'order' => 'ASC',
4255 'hide_empty' => false
4256 ));
4257
4258 foreach ($categories as $category) {
4259 echo '<option value="' . esc_attr($category->term_id) . '">' . esc_html($category->name) . '</option>';
4260 }
4261 ?>
4262 </select>
4263 </div>
4264
4265
4266
4267 <div class="col-md-6">
4268 <label class="form-label" for="image_generating_status"><?php esc_html_e('Image Generating Method', 'autowp'); ?></label>
4269 <select name="image_generating_status" class="form-select">
4270 <option value="0"><?php esc_html_e('FLUX Realism LoRA', 'autowp'); ?></option>
4271 <option value="1"><?php esc_html_e('Stable Diffusion Ultra', 'autowp'); ?></option>
4272 <option value="2"><?php esc_html_e('Stable Diffusion Core', 'autowp'); ?></option>
4273 <option value="3"><?php esc_html_e('DALL-E 2', 'autowp'); ?></option>
4274 <option value="4"><?php esc_html_e('DALL-E 3', 'autowp'); ?></option>
4275 <option value="5"><?php esc_html_e('DuckDuckGo Search', 'autowp'); ?></option>
4276 <option value="6"><?php esc_html_e('Default Image', 'autowp'); ?></option>
4277 <option value="7"><?php esc_html_e('No Image', 'autowp'); ?></option>
4278 <option value="8"><?php esc_html_e('Original Image', 'autowp'); ?></option>
4279 </select>
4280 <p class="form-text"><?php esc_html_e('By default FLUX Realism LoRA is selected.', 'autowp'); ?></p>
4281 </div>
4282
4283
4284
4285 <div class="col-md-6">
4286 <label for="post_order" class="form-label">Post Order:</label>
4287 <select id="post_order" name="post_order" class="form-select">
4288 <option value="desc">Latest First</option>
4289 <option value="asc">Oldest First</option>
4290 <option value="rand">Random</option>
4291 </select>
4292 </div>
4293
4294
4295
4296
4297 <h4 style="font-weight: bold;">Post Settings</h4>
4298 <br>
4299 <div class="col-md-6">
4300 <label for="languageSelect" class="form-label">Post Language:</label>
4301 <select class="form-select" id="languageSelect" name="languageSelect">
4302 <?php
4303 $languages = [
4304 "Afrikaans",
4305 "Albanian",
4306 "Arabic",
4307 "Armenian",
4308 "Basque",
4309 "Bengali",
4310 "Bulgarian",
4311 "Catalan",
4312 "Cambodian",
4313 "Chinese (Mandarin)",
4314 "Croatian",
4315 "Czech",
4316 "Danish",
4317 "Dutch",
4318 "English",
4319 "Estonian",
4320 "Fiji",
4321 "Finnish",
4322 "French",
4323 "Georgian",
4324 "German",
4325 "Greek",
4326 "Gujarati",
4327 "Hebrew",
4328 "Hindi",
4329 "Hungarian",
4330 "Icelandic",
4331 "Indonesian",
4332 "Irish",
4333 "Italian",
4334 "Japanese",
4335 "Javanese",
4336 "Korean",
4337 "Latin",
4338 "Latvian",
4339 "Lithuanian",
4340 "Macedonian",
4341 "Malay",
4342 "Malayalam",
4343 "Maltese",
4344 "Maori",
4345 "Marathi",
4346 "Mongolian",
4347 "Nepali",
4348 "Norwegian",
4349 "Persian",
4350 "Polish",
4351 "Portuguese",
4352 "Punjabi",
4353 "Quechua",
4354 "Romanian",
4355 "Russian",
4356 "Samoan",
4357 "Serbian",
4358 "Slovak",
4359 "Slovenian",
4360 "Spanish",
4361 "Swahili",
4362 "Swedish",
4363 "Tamil",
4364 "Tatar",
4365 "Telugu",
4366 "Thai",
4367 "Tibetan",
4368 "Tonga",
4369 "Turkish",
4370 "Ukrainian",
4371 "Urdu",
4372 "Uzbek",
4373 "Vietnamese",
4374 "Welsh",
4375 "Xhosa"
4376 ];
4377 ?>
4378 <?php foreach ($languages as $language): ?>
4379 <option value="<?php echo esc_attr($language); ?>">
4380 <?php echo esc_html($language); ?>
4381 </option>
4382 <?php endforeach; ?>
4383
4384
4385 </select>
4386 </div>
4387 <br>
4388 <div class="col-md-6">
4389 <label for="subtitleSelect" class="form-label">Subheading Count:</label>
4390 <select class="form-select" id="subtitleSelect" name="subtitleSelect">
4391 <?php
4392 for ($i = 1; $i <= 10; $i++) {
4393
4394 echo '<option value="' . esc_attr($i) . '">' . esc_html($i) . '</option>';
4395 }
4396 ?>
4397 </select>
4398 </div>
4399 <br>
4400 <div class="col-md-6">
4401 <label for="narrationSelect" class="form-label">Writing Style:</label>
4402 <select class="form-select" id="narrationSelect" name="narrationSelect">
4403 <?php
4404 $styles = [
4405 "Descriptive" => "Descriptive",
4406 "Narrative" => "Narrative",
4407 "Explanatory" => "Explanatory",
4408 "Argumentative" => "Argumentative",
4409 "Comparative" => "Comparative",
4410 "Process Analysis" => "Process Analysis",
4411 "Allegorical" => "Allegorical",
4412 "Chronological" => "Chronological",
4413 "Ironic" => "Ironic",
4414 "ConsistencyAndRepetition" => "Consistency and Repetition",
4415 "LanguagePlayAndPoeticExpression" => "Language Play and Poetic Expression",
4416 "InternalMonologue" => "Internal Monologue",
4417 "Dialogical" => "Dialogical"
4418 ];
4419 foreach ($styles as $value => $name) {
4420 echo '<option value="' . esc_attr($value) . '">' . esc_html($name) . '</option>';
4421 }
4422 ?>
4423
4424 </select>
4425
4426 </div>
4427
4428 <div class="col-md-12">
4429 <p class="message">For prompt examples, visit <a class="link" href="https://www.aiprm.com/prompts/">aiprm.com/prompts</a></p>
4430 </div>
4431 <div class="col-12">
4432 <input type="submit" name="submit" id="submit" class="btn btn-primary" value="Generate Post">
4433 </div>
4434 </form>
4435 </div>
4436
4437 </form>
4438 </div>
4439 </div>
4440 </div>
4441 </div>
4442 <!-- Sidebar -->
4443 <div id="postbox-container-1" class="postbox-container">
4444 <!-- Sidebar content here (if any) -->
4445 </div>
4446 </div>
4447 <br class="clear">
4448 </div>
4449 </div>
4450 <?php
4451 }
4452
4453
4454
4455 function autowp_manual_post_rss_scheduled_event($form_data) {
4456
4457 if($form_data['website_type'] === 'rss'){
4458 // Call the function with the form data
4459 autowp_manual_post_rss_form_page_setOptions($form_data);
4460 }else if ( $form_data['website_type'] === 'wordpress'){
4461 autowp_manual_post_wp_form_page_setOptions($form_data);
4462
4463 }else if ($form_data['website_type'] === 'news'){
4464 autowp_manual_post_news_form_page_setOptions($form_data);
4465 }else if ($form_data['website_type'] === 'ai'){
4466 autowp_manual_post_ai_form_page_setOptions($form_data);
4467 }else if ($form_data['website_type'] === 'agenticscraper') {
4468 autowp_manual_post_agenticscraper_form_page_setOptions($form_data);
4469
4470 }
4471
4472 }
4473
4474
4475 // Hook this function to run when the scheduled event occurs
4476 add_action('autowp_manual_post_rss_event', 'autowp_manual_post_rss_scheduled_event');
4477
4478
4479
4480
4481
4482
4483 function autowp_manual_post_rss_form_page_handler() {
4484
4485 if (isset($_POST['_wpnonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['_wpnonce'])), 'autowp_manual_post_rss_nonce')) {
4486
4487 $form_data = $_POST;
4488
4489 $form_data['website_type'] = 'rss';
4490
4491
4492 $form_data['content_prompt'] ='[autowp-rewriting-promptcode]' .
4493 sanitize_text_field($form_data['languageSelect']) . ',' .
4494 sanitize_text_field($form_data['subtitleSelect']) . ',' .
4495 sanitize_text_field($form_data['narrationSelect']) .
4496 '[/autowp-rewriting-promptcode]';
4497
4498 $validate_form = autowp_validate_website($form_data,true);
4499
4500
4501
4502 if($validate_form === true){
4503 autowp_show_alert_with_message(true,'Your process successfully started!');
4504 schedule_autowp_manual_post_rss_event($form_data);
4505 }else{
4506
4507
4508 autowp_show_alert_with_message(false,$validate_form);
4509
4510 }
4511
4512
4513
4514
4515 }
4516 ?>
4517
4518 <div class="wrap">
4519 <h1>Manual Post - RSS</h1>
4520 <a href="javascript:history.back()" class="btn btn-primary">Go Back</a>
4521
4522 <div id="poststuff">
4523 <div id="post-body" class="metabox-holder columns-2">
4524 <!-- Main Content -->
4525 <div id="post-body-content">
4526 <div class="meta-box-sortables ui-sortable">
4527 <div class="postbox">
4528 <h2 class="hndle ui-sortable-handle">RSS Settings</h2>
4529 <div class="inside">
4530 <div id="loading">
4531 <div class="loader">
4532 <div class="inner one"></div>
4533 <div class="inner two"></div>
4534 <div class="inner three"></div>
4535 </div>
4536 </div>
4537 <form id="autowp_manual_post_form" method="post">
4538 <?php wp_nonce_field('autowp_manual_post_rss_nonce', '_wpnonce'); ?>
4539 <tbody>
4540 <div class="form2bc">
4541
4542 <div class="container">
4543 <form class="row g-3" id="post_generation_form">
4544 <div class="col-md-6">
4545 <label for="domain_name" class="form-label">RSS Feed URL:</label>
4546 <input id="domain_name" name="domain_name" type="text" class="form-control" value="" required>
4547 <p class="form-text"><?php esc_html_e('E.g https://kelimelerbenim.com/feed', 'autowp'); ?></p>
4548 </div>
4549
4550 <div class="col-md-6">
4551 <label for="category_id" class="form-label">Categories:</label>
4552 <select id="category_id" name="category_id[]" required multiple class="form-select">
4553 <?php
4554 $categories = get_categories(array(
4555 'orderby' => 'name',
4556 'order' => 'ASC',
4557 'hide_empty' => false
4558 ));
4559
4560 foreach ($categories as $category) {
4561 echo '<option value="' . esc_attr($category->term_id) . '">' . esc_html($category->name) . '</option>';
4562 }
4563 ?>
4564 </select>
4565 </div>
4566
4567 <div class="col-md-6">
4568 <label for="author_selection" class="form-label"><?php esc_html_e('Author Selection', 'autowp'); ?></label>
4569 <select name="author_selection" class="form-select">
4570 <?php
4571 $authors = get_users();
4572 foreach ($authors as $author) {
4573 $author_id = $author->ID;
4574 $author_name = $author->display_name;
4575 $author_description = get_the_author_meta('description', $author_id);
4576 echo '<option value="' . esc_attr($author_id) . '">' . esc_html($author_name) . '</option>';
4577 }
4578 ?>
4579 </select>
4580 <p class="form-text"><?php esc_html_e('Select an author from the list.', 'autowp'); ?></p>
4581 </div>
4582
4583
4584
4585 <div class="col-md-6">
4586 <label class="form-label" for="image_generating_status"><?php esc_html_e('Image Generating Method', 'autowp'); ?></label>
4587 <select name="image_generating_status" class="form-select">
4588 <option value="0"><?php esc_html_e('FLUX Realism LoRA', 'autowp'); ?></option>
4589 <option value="1"><?php esc_html_e('Stable Diffusion Ultra', 'autowp'); ?></option>
4590 <option value="2"><?php esc_html_e('Stable Diffusion Core', 'autowp'); ?></option>
4591 <option value="3"><?php esc_html_e('DALL-E 2', 'autowp'); ?></option>
4592 <option value="4"><?php esc_html_e('DALL-E 3', 'autowp'); ?></option>
4593 <option value="5"><?php esc_html_e('DuckDuckGo Search', 'autowp'); ?></option>
4594 <option value="6"><?php esc_html_e('Default Image', 'autowp'); ?></option>
4595 <option value="7"><?php esc_html_e('No Image', 'autowp'); ?></option>
4596
4597 </select>
4598 <p class="form-text"><?php esc_html_e('By default FLUX Realism LoRA is selected. ', 'autowp'); ?></p>
4599 </div>
4600
4601
4602
4603 <div class="col-md-6">
4604 <label for="post_order" class="form-label">Post Order:</label>
4605 <select id="post_order" name="post_order" class="form-select">
4606 <option value="desc">Latest First</option>
4607 <option value="asc">Oldest First</option>
4608 <option value="rand">Random</option>
4609 </select>
4610 </div>
4611
4612
4613
4614 <h4 style="font-weight: bold;">Post Settings</h4>
4615 <br>
4616 <div class="col-md-6">
4617 <label for="languageSelect" class="form-label">Post Language:</label>
4618 <select class="form-select" id="languageSelect" name="languageSelect">
4619 <?php
4620 $languages = [
4621 "Afrikaans",
4622 "Albanian",
4623 "Arabic",
4624 "Armenian",
4625 "Basque",
4626 "Bengali",
4627 "Bulgarian",
4628 "Catalan",
4629 "Cambodian",
4630 "Chinese (Mandarin)",
4631 "Croatian",
4632 "Czech",
4633 "Danish",
4634 "Dutch",
4635 "English",
4636 "Estonian",
4637 "Fiji",
4638 "Finnish",
4639 "French",
4640 "Georgian",
4641 "German",
4642 "Greek",
4643 "Gujarati",
4644 "Hebrew",
4645 "Hindi",
4646 "Hungarian",
4647 "Icelandic",
4648 "Indonesian",
4649 "Irish",
4650 "Italian",
4651 "Japanese",
4652 "Javanese",
4653 "Korean",
4654 "Latin",
4655 "Latvian",
4656 "Lithuanian",
4657 "Macedonian",
4658 "Malay",
4659 "Malayalam",
4660 "Maltese",
4661 "Maori",
4662 "Marathi",
4663 "Mongolian",
4664 "Nepali",
4665 "Norwegian",
4666 "Persian",
4667 "Polish",
4668 "Portuguese",
4669 "Punjabi",
4670 "Quechua",
4671 "Romanian",
4672 "Russian",
4673 "Samoan",
4674 "Serbian",
4675 "Slovak",
4676 "Slovenian",
4677 "Spanish",
4678 "Swahili",
4679 "Swedish",
4680 "Tamil",
4681 "Tatar",
4682 "Telugu",
4683 "Thai",
4684 "Tibetan",
4685 "Tonga",
4686 "Turkish",
4687 "Ukrainian",
4688 "Urdu",
4689 "Uzbek",
4690 "Vietnamese",
4691 "Welsh",
4692 "Xhosa"
4693 ];
4694 ?>
4695 <?php foreach ($languages as $language): ?>
4696 <option value="<?php echo esc_attr($language); ?>">
4697 <?php echo esc_html($language); ?>
4698 </option>
4699 <?php endforeach; ?>
4700
4701
4702 </select>
4703 </div>
4704 <br>
4705 <div class="col-md-6">
4706 <label for="subtitleSelect" class="form-label">Subheading Count:</label>
4707 <select class="form-select" id="subtitleSelect" name="subtitleSelect">
4708 <?php
4709 for ($i = 1; $i <= 10; $i++) {
4710 echo '<option value="' . esc_attr($i) . '">' . esc_html($i) . '</option>';
4711 }
4712 ?>
4713 </select>
4714 </div>
4715 <br>
4716 <div class="col-md-6">
4717 <label for="narrationSelect" class="form-label">Writing Style:</label>
4718 <select class="form-select" id="narrationSelect" name="narrationSelect">
4719 <?php
4720 $styles = [
4721 "Descriptive" => "Descriptive",
4722 "Narrative" => "Narrative",
4723 "Explanatory" => "Explanatory",
4724 "Argumentative" => "Argumentative",
4725 "Comparative" => "Comparative",
4726 "Process Analysis" => "Process Analysis",
4727 "Allegorical" => "Allegorical",
4728 "Chronological" => "Chronological",
4729 "Ironic" => "Ironic",
4730 "ConsistencyAndRepetition" => "Consistency and Repetition",
4731 "LanguagePlayAndPoeticExpression" => "Language Play and Poetic Expression",
4732 "InternalMonologue" => "Internal Monologue",
4733 "Dialogical" => "Dialogical"
4734 ];
4735 foreach ($styles as $value => $name) {
4736 echo '<option value="' . esc_attr($value) . '">' . esc_html($name) . '</option>';
4737 }
4738 ?>
4739
4740 </select>
4741
4742 </div>
4743
4744 <div class="col-md-12">
4745 <p class="message">For prompt examples, visit <a class="link" href="https://www.aiprm.com/prompts/">aiprm.com/prompts</a></p>
4746 </div>
4747 <div class="col-12">
4748 <input type="submit" name="submit" id="submit" class="btn btn-primary" value="Generate Post">
4749 </div>
4750
4751 </form>
4752 </div>
4753
4754 </div>
4755 </tbody>
4756
4757 </form>
4758 </div>
4759 </div>
4760 </div>
4761 </div>
4762 <!-- Sidebar -->
4763 <div id="postbox-container-1" class="postbox-container">
4764 <!-- Sidebar content here (if any) -->
4765 </div>
4766 </div>
4767 <br class="clear">
4768 </div>
4769 </div>
4770
4771
4772 <?php
4773 }
4774
4775 function autowp_manual_post_agenticscraper_form_page_setOptions($form_data) {
4776
4777 // Temel ayarlar
4778 $autowp_admin_email = autowp_get_admin_email();
4779 $autowp_domain_name = esc_url(get_site_url());
4780 $website_domainname = '';
4781 $website_categories = '';
4782 $post_count = '';
4783 $post_order = '';
4784 $post_ids = '';
4785
4786 // Başlık, etiket ve resim promptları kullanılmıyor
4787 $title_prompt = '';
4788 $tags_prompt = '';
4789 $image_prompt = '';
4790
4791 // Kaynak tipi özel formumuz için
4792 $source_type = 'agenticscraper';
4793
4794 // Yazar seçimi (varsayılan 1)
4795 $author_selection = isset($form_data['author_selection']) ? sanitize_text_field($form_data['author_selection']) : 1;
4796
4797 // İçerik promptunda kullanılacak uzun açıklama (long description)
4798 $long_description = sanitize_textarea_field($form_data['long_description']);
4799
4800 $keywordInput = isset($form_data['keywordInput']) ? sanitize_text_field($form_data['keywordInput']) : '';
4801 $languageSelect = isset($form_data['languageSelect']) ? sanitize_text_field($form_data['languageSelect']) : '';
4802 $subtitleSelect = isset($form_data['subtitleSelect']) ? intval($form_data['subtitleSelect']) : 1;
4803 $narrationSelect = isset($form_data['narrationSelect']) ? sanitize_text_field($form_data['narrationSelect']) : '';
4804
4805
4806 $wordpress_categories = isset($form_data['category_id']) ? array_map('intval', $form_data['category_id']) : array();
4807
4808
4809 // Varsayılanlar (başlık, içerik, etiketler için)
4810 $aigenerated_title = '1';
4811 $aigenerated_content = '1';
4812 $aigenerated_tags = '1';
4813 $aigenerated_image = '1';
4814
4815 if(isset($form_data['aigenerated_image'])){
4816 $aigenerated_image = sanitize_text_field($form_data['aigenerated_image']);
4817 }
4818
4819 // Resim ayarlarını alıyoruz
4820 $image_settings = unserialize(get_option('autowp_settings'));
4821 $image_settings_json = !empty($image_settings) ? json_encode($image_settings) : '';
4822
4823 // Bu formda resim oluşturma durumu kullanılmayabilir
4824 $image_generating_status = sanitize_text_field($form_data['image_generating_status']);
4825
4826 // Yeniden yazım prompt şeması
4827 $prompts_option = get_option('autowp_rewriting_promptscheme');
4828 $prompt_option_str = strval($prompts_option);
4829
4830 // Kullanıcı e-postasını alıyoruz
4831 $user_email = autowp_get_user_email_from_settings();
4832
4833 /*
4834 * Özel Araçlar (Custom Tools) Ayarları
4835 */
4836 // Website Tools: Knowledge Base URL (varsa, geçerli URL olmalı)
4837 $website_tools_knowledge_base_url = !empty($form_data['website_tools_knowledge_base_url'])
4838 ? sanitize_url($form_data['website_tools_knowledge_base_url'])
4839 : '';
4840
4841 // DuckDuckGO Search ayarları
4842 $duckduckgo_news = isset($form_data['duckduckgo_news']) ? '1' : '0';
4843 $duckduckgo_fixed_max_results = !empty($form_data['duckduckgo_fixed_max_results'])
4844 ? intval($form_data['duckduckgo_fixed_max_results'])
4845 : null;
4846
4847 // Wikipedia ayarları: virgülle ayrılmış konu listesi
4848 $wikipedia_knowledge_base = !empty($form_data['wikipedia_knowledge_base'])
4849 ? sanitize_text_field($form_data['wikipedia_knowledge_base'])
4850 : '';
4851
4852 // YFinanceTools ayarları
4853 $yfinance_stock_price = isset($form_data['yfinance_stock_price']) ? '1' : '0';
4854 $yfinance_company_info = isset($form_data['yfinance_company_info']) ? '1' : '0';
4855 $yfinance_stock_fundamentals = isset($form_data['yfinance_stock_fundamentals']) ? '1' : '0';
4856 $yfinance_income_statements = isset($form_data['yfinance_income_statements']) ? '1' : '0';
4857 $yfinance_key_financial_ratios = isset($form_data['yfinance_key_financial_ratios']) ? '1' : '0';
4858 $yfinance_analyst_recommendations = isset($form_data['yfinance_analyst_recommendations']) ? '1' : '0';
4859 $yfinance_company_news = isset($form_data['yfinance_company_news']) ? '1' : '0';
4860 $yfinance_technical_indicators = isset($form_data['yfinance_technical_indicators']) ? '1' : '0';
4861 $yfinance_historical_prices = isset($form_data['yfinance_historical_prices']) ? '1' : '0';
4862
4863
4864
4865 // Toggles for custom tools and knowledge base
4866 $enable_website_tools = isset($form_data['enable_website_tools']) ? '1' : '0';
4867 $enable_duckduckgo = isset($form_data['enable_duckduckgo']) ? '1' : '0';
4868 $enable_wikipedia = isset($form_data['enable_wikipedia']) ? '1' : '0';
4869 $enable_yfinancetools = isset($form_data['enable_yfinancetools']) ? '1' : '0';
4870 $enable_hackernews = isset($form_data['enable_hackernews']) ? '1' : '0';
4871
4872 $enable_pdf_kb = isset($form_data['enable_pdf_kb']) ? '1' : '0';
4873 $enable_csv_kb = isset($form_data['enable_csv_kb']) ? '1' : '0';
4874 $enable_text_kb = isset($form_data['enable_text_kb']) ? '1' : '0';
4875
4876
4877 // Hacker News ayarları
4878 $hackernews_get_top_stories = isset($form_data['hackernews_get_top_stories']) ? '1' : '0';
4879 $hackernews_get_user_details = isset($form_data['hackernews_get_user_details']) ? '1' : '0';
4880
4881 // Özel araç ayarlarını diziye ekleyelim
4882 $custom_tools = [
4883 'website_tools' => [
4884 'knowledge_base_url' => $website_tools_knowledge_base_url,
4885 ],
4886 'duckduckgo' => [
4887 'news' => $duckduckgo_news,
4888 'fixed_max_results' => $duckduckgo_fixed_max_results,
4889 ],
4890 'wikipedia' => [
4891 'knowledge_base' => $wikipedia_knowledge_base,
4892 ],
4893 'yfinancetools' => [
4894 'stock_price' => $yfinance_stock_price,
4895 'company_info' => $yfinance_company_info,
4896 'stock_fundamentals' => $yfinance_stock_fundamentals,
4897 'income_statements' => $yfinance_income_statements,
4898 'key_financial_ratios' => $yfinance_key_financial_ratios,
4899 'analyst_recommendations' => $yfinance_analyst_recommendations,
4900 'company_news' => $yfinance_company_news,
4901 'technical_indicators' => $yfinance_technical_indicators,
4902 'historical_prices' => $yfinance_historical_prices,
4903 ],
4904 'hackernews' => [
4905 'get_top_stories' => $hackernews_get_top_stories,
4906 'get_user_details' => $hackernews_get_user_details,
4907 ],
4908 ];
4909
4910 /*
4911 * Knowledge Base Ayarları
4912 */
4913 $pdf_url_knowledge_base = !empty($form_data['pdf_url_knowledge_base'])
4914 ? sanitize_url($form_data['pdf_url_knowledge_base'])
4915 : '';
4916 $csv_url_knowledge_base = !empty($form_data['csv_url_knowledge_base'])
4917 ? sanitize_url($form_data['csv_url_knowledge_base'])
4918 : '';
4919 $text_knowledge_base = !empty($form_data['text_knowledge_base'])
4920 ? sanitize_textarea_field($form_data['text_knowledge_base'])
4921 : '';
4922
4923 $knowledge_base = [
4924 'pdf_url' => $pdf_url_knowledge_base,
4925 'csv_url' => $csv_url_knowledge_base,
4926 'text' => $text_knowledge_base,
4927 ];
4928
4929 /*
4930 * Ekstra parametreleri içerik promptu içinde JSON formatında birleştiriyoruz.
4931 * Böylece API çağrısında content_prompt içerisinde hem long description hem de
4932 * custom tools ve knowledge base ayarlarını gönderebiliyoruz.
4933 */
4934 $combined_prompt = [
4935 'content' => $long_description,
4936 'keyword' => $keywordInput,
4937 'language' => $languageSelect,
4938 'subheading_count' => $subtitleSelect,
4939 'writing_style' => $narrationSelect,
4940 'custom_tools' => $custom_tools,
4941 'knowledge_base' => $knowledge_base,
4942 'enable_website_tools' => $enable_website_tools,
4943 'enable_duckduckgo' => $enable_duckduckgo,
4944 'enable_wikipedia' => $enable_wikipedia,
4945 'enable_yfinancetools' => $enable_yfinancetools,
4946 'enable_hackernews' => $enable_hackernews,
4947 'enable_pdf_kb' => $enable_pdf_kb,
4948 'enable_csv_kb' => $enable_csv_kb,
4949 'enable_text_kb' => $enable_text_kb,
4950 ];
4951
4952 $content_prompt = json_encode($combined_prompt);
4953
4954 /*
4955 * API çağrısını mevcut parametrelerle yapıyoruz. Artık ek parametre eklemeye gerek kalmadı.
4956 */
4957 $get_data_from_api = autowp_get_posts_from_wp_website(
4958 $autowp_domain_name,
4959 $user_email,
4960 $website_domainname,
4961 $website_categories,
4962 $post_count,
4963 $post_order,
4964 $post_ids,
4965 $title_prompt,
4966 $content_prompt,
4967 $tags_prompt,
4968 $image_prompt,
4969 $aigenerated_title,
4970 $aigenerated_content,
4971 $aigenerated_tags,
4972 $aigenerated_image,
4973 $image_settings_json,
4974 $source_type,
4975 $image_generating_status,
4976 $prompt_option_str
4977 );
4978 $wp_posts = $get_data_from_api['autowp-api'];
4979
4980 if ($get_data_from_api['error']) {
4981 update_option('autowp_alerts', $get_data_from_api['error']);
4982 } else {
4983 update_option('autowp_alerts', '');
4984 if (empty($wp_posts)) {
4985 update_option('autowp_alerts', 'There is no new post from your feed url!');
4986 }
4987 }
4988
4989 // İşlenen postları oluşturuyoruz
4990 foreach ($wp_posts as $post) {
4991 $post_ids .= ',' . $post['post_id'] . $post['slug'];
4992 $post_title = $post['post_title'];
4993 $post_content = $post['content'];
4994 $post_featured_image = $post['preview_image_original'];
4995 $post_tags = $post['tags'];
4996 $post_status = $image_settings['post_status'] ?? 'publish';
4997 $post_author = $author_selection;
4998 $post_type = 'post';
4999 $focus_keyword = $post['focus_keyword'];
5000 $faq_schema = $post['faq_schema'];
5001
5002 autowp_set_new_post(
5003 $post_title,
5004 $post_content,
5005 $post_status,
5006 $post_author,
5007 $post_type,
5008 $post_featured_image,
5009 $wordpress_categories, // Bu formda kategori gönderilmiyor
5010 $post_tags,
5011 $focus_keyword,
5012 $faq_schema
5013 );
5014 }
5015
5016 autowp_update_published_post_ids($post_ids);
5017 }
5018
5019
5020 function autowp_manual_post_ai_form_page_setOptions($form_data){
5021
5022 $autowp_admin_email = autowp_get_admin_email();
5023 $autowp_domain_name = esc_url(get_site_url());
5024 $website_domainname = '';
5025 $website_categories = '';
5026 $post_count = '';
5027 $post_order = '';
5028 $post_ids = '';
5029 $title_prompt = sanitize_text_field($form_data['title_prompt']);
5030 $content_prompt = sanitize_text_field($form_data['content_prompt']);
5031 $tags_prompt = sanitize_text_field($form_data['tags_prompt']);
5032 $image_prompt = sanitize_text_field($form_data['image_prompt']);
5033
5034 $author_selection = sanitize_text_field($form_data['author_selection']) ?? 1;
5035
5036 $aigenerated_title = '1';
5037 $aigenerated_content = '1';
5038 $aigenerated_tags = '1';
5039 $aigenerated_image = '1';
5040
5041 if(isset($form_data['aigenerated_image'])){
5042 $aigenerated_image = sanitize_text_field($form_data['aigenerated_image']);
5043 }
5044
5045 $image_settings = unserialize(get_option('autowp_settings'));
5046 $image_settings_json = [];
5047
5048 if(!empty($image_settings)){
5049 $image_settings_json = json_encode($image_settings);
5050 }
5051
5052
5053 $source_type = 'ai';
5054
5055
5056 $wordpress_categories = isset($form_data['category_id']) ? array_map('intval', $form_data['category_id']) : array();
5057
5058 $image_generating_status = sanitize_text_field($form_data['image_generating_status']);
5059
5060 $prompts_option = get_option('autowp_rewriting_promptscheme');
5061 $prompt_option_str = strval($prompts_option);
5062 $rewriting_prompt_scheme = [];
5063
5064 if (!empty($prompts_option)) {
5065 $rewriting_prompt_scheme = json_encode($prompts_option);
5066
5067 // JSON'dan diziye dönüşüm yapılıyor ve true ile birlikte kullanıldığı için asosiyatif dizi elde ediliyor
5068 }
5069
5070 $user_email = autowp_get_user_email_from_settings();
5071
5072
5073 $get_data_from_api = autowp_get_posts_from_wp_website($autowp_domain_name, $user_email, $website_domainname, $website_categories, $post_count,$post_order,$post_ids,$title_prompt,$content_prompt,$tags_prompt,$image_prompt,$aigenerated_title,$aigenerated_content,$aigenerated_tags,$aigenerated_image,$image_settings_json,$source_type,$image_generating_status,$prompt_option_str);
5074 $wp_posts = $get_data_from_api['autowp-api'];
5075
5076
5077
5078
5079 if($get_data_from_api['error']){
5080 update_option('autowp_alerts', $get_data_from_api['error']);
5081
5082 }else{
5083 update_option('autowp_alerts', '');
5084 if(!empty($wp_posts)){
5085 // autowp_show_alert_with_message(true,'Success!');
5086 }else{
5087 // autowp_show_alert_with_message(false,'There is no new post from your feed url!');
5088 update_option('autowp_alerts', 'There is no new post from your feed url!');
5089 }
5090 }
5091
5092
5093
5094
5095 foreach($wp_posts as $post){
5096
5097 $post_ids = $post_ids . ',' . $post['post_id'] . $post['slug'];
5098 $post_title = $post['post_title'];
5099 $post_content = $post['content'];
5100 $post_featured_image = $post['preview_image_original'];
5101 $post_tags = $post['tags'];
5102 $post_status = $image_settings['post_status'] ?? 'publish';
5103 $post_author = $author_selection;
5104 $post_type = 'post';
5105 $focus_keyword = $post['focus_keyword'];
5106 $faq_schema = $post['faq_schema'];
5107
5108
5109
5110
5111 autowp_set_new_post($post_title,$post_content,$post_status,$post_author,$post_type,$post_featured_image, $wordpress_categories,$post_tags,$focus_keyword,$faq_schema);
5112
5113
5114 }
5115
5116 autowp_update_published_post_ids($post_ids);
5117
5118
5119
5120 }
5121
5122
5123 function autowp_manual_post_agenticscraper_form_page_handler() {
5124
5125 // Process form submission
5126 if ( isset( $_POST['_wpnonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ), 'autowp_manual_post_agenticscraper_nonce' ) ) {
5127
5128 $form_data = $_POST;
5129 $form_data['website_type'] = 'agenticscraper';
5130
5131 // Use long description as content prompt
5132 $form_data['content_prompt'] = sanitize_text_field( $form_data['long_description'] );
5133
5134 // Additional validations can be added here
5135 $validate_form = autowp_validate_agenticscraper( $form_data, true );
5136
5137 if ( $validate_form === true ) {
5138 autowp_show_alert_with_message( true, 'Your process successfully started!' );
5139 schedule_autowp_manual_post_rss_event( $form_data );
5140 } else {
5141 autowp_show_alert_with_message( false, $validate_form );
5142 }
5143 }
5144 ?>
5145 <div class="wrap">
5146 <h1>Manual Post - Agentic Scraper</h1>
5147 <a href="javascript:history.back()" class="btn btn-primary mb-3">Go Back</a>
5148 <div id="poststuff">
5149 <div id="post-body" class="metabox-holder">
5150 <div id="post-body-content" class="row">
5151 <div class="col-md-9">
5152 <div class="meta-box-sortables ui-sortable">
5153 <div class="postbox mb-4">
5154 <h2 class="hndle ui-sortable-handle">Agentic Scraper Settings</h2>
5155 <div class="inside">
5156 <form method="post">
5157 <?php wp_nonce_field( 'autowp_manual_post_agenticscraper_nonce', '_wpnonce' ); ?>
5158
5159 <div class="mb-3">
5160 <label for="author_selection" class="form-label"><?php esc_html_e('Author Selection', 'autowp'); ?></label>
5161 <select name="author_selection" class="form-select">
5162 <?php
5163 $authors = get_users();
5164
5165 foreach ($authors as $author) {
5166 $author_id = $author->ID;
5167 $author_name = $author->display_name;
5168 $author_description = get_the_author_meta('description', $author_id);
5169
5170 echo '<option value="' . esc_attr($author_id) . '">' . esc_html($author_name) . '</option>';
5171 }
5172 ?>
5173 </select>
5174 <p class="form-text"><?php esc_html_e('Select an author from the list.', 'autowp'); ?></p>
5175 </div>
5176
5177 <div class="mb-3">
5178 <label for="category_id" class="form-label">Categories:</label>
5179 <select id="category_id" name="category_id[]" required multiple class="form-select">
5180 <?php
5181 $categories = get_categories(array(
5182 'orderby' => 'name',
5183 'order' => 'ASC',
5184 'hide_empty' => false
5185 ));
5186
5187 foreach ($categories as $category) {
5188 echo '<option value="' . esc_attr($category->term_id) . '">' . esc_html($category->name) . '</option>';
5189 }
5190 ?>
5191 </select>
5192 </div>
5193
5194 <div class="mb-3">
5195 <label class="form-check-label">AI Settings :</label>
5196 <div class="form-check">
5197 <br>
5198 <input type="checkbox" id="aigenerated_image" name="aigenerated_image" value="1" class="form-check-input">
5199 <label for="aigenerated_image" class="form-check-label">Generated thumbnail with AI (SEO Friendly)</label>
5200 </div>
5201 </div>
5202
5203 <div class="col-md-6">
5204 <label class="form-label" for="image_generating_status"><?php esc_html_e('Image Generating Method', 'autowp'); ?></label>
5205 <select name="image_generating_status" class="form-select">
5206 <option value="0"><?php esc_html_e('FLUX Realism LoRA', 'autowp'); ?></option>
5207 <option value="1"><?php esc_html_e('Stable Diffusion Ultra', 'autowp'); ?></option>
5208 <option value="2"><?php esc_html_e('Stable Diffusion Core', 'autowp'); ?></option>
5209 <option value="3"><?php esc_html_e('DALL-E 2', 'autowp'); ?></option>
5210 <option value="4"><?php esc_html_e('DALL-E 3', 'autowp'); ?></option>
5211 <option value="5"><?php esc_html_e('DuckDuckGo Search', 'autowp'); ?></option>
5212 <option value="6"><?php esc_html_e('Default Image', 'autowp'); ?></option>
5213 <option value="7"><?php esc_html_e('No Image', 'autowp'); ?></option>
5214 </select>
5215 <p class="form-text"><?php esc_html_e('By default FLUX Realism LoRA is selected.', 'autowp'); ?></p>
5216 </div>
5217
5218
5219
5220 <!-- Long Description Prompt -->
5221 <div class="mb-3">
5222 <label for="long_description" class="form-label">Long Description Prompt:</label>
5223 <textarea class="form-control" id="long_description" name="long_description" rows="5" placeholder="Enter your detailed prompt here..."></textarea>
5224 <div class="form-text">Provide a detailed prompt for generating content.</div>
5225 </div>
5226
5227
5228
5229
5230 <h4 style="font-weight: bold;">Post Settings</h4>
5231 <!-- Integration of your initial form inputs starts here -->
5232 <div class="mb-3">
5233 <label for="keywordInput" class="form-label">Keyword:</label>
5234 <input type="text" class="form-control" id="keywordInput" name="keywordInput" placeholder="Enter keyword" value="" required class="form-control">
5235 </div>
5236
5237
5238 <?php
5239 $languages = [
5240 "Afrikaans",
5241 "Albanian",
5242 "Arabic",
5243 "Armenian",
5244 "Basque",
5245 "Bengali",
5246 "Bulgarian",
5247 "Catalan",
5248 "Cambodian",
5249 "Chinese (Mandarin)",
5250 "Croatian",
5251 "Czech",
5252 "Danish",
5253 "Dutch",
5254 "English",
5255 "Estonian",
5256 "Fiji",
5257 "Finnish",
5258 "French",
5259 "Georgian",
5260 "German",
5261 "Greek",
5262 "Gujarati",
5263 "Hebrew",
5264 "Hindi",
5265 "Hungarian",
5266 "Icelandic",
5267 "Indonesian",
5268 "Irish",
5269 "Italian",
5270 "Japanese",
5271 "Javanese",
5272 "Korean",
5273 "Latin",
5274 "Latvian",
5275 "Lithuanian",
5276 "Macedonian",
5277 "Malay",
5278 "Malayalam",
5279 "Maltese",
5280 "Maori",
5281 "Marathi",
5282 "Mongolian",
5283 "Nepali",
5284 "Norwegian",
5285 "Persian",
5286 "Polish",
5287 "Portuguese",
5288 "Punjabi",
5289 "Quechua",
5290 "Romanian",
5291 "Russian",
5292 "Samoan",
5293 "Serbian",
5294 "Slovak",
5295 "Slovenian",
5296 "Spanish",
5297 "Swahili",
5298 "Swedish",
5299 "Tamil",
5300 "Tatar",
5301 "Telugu",
5302 "Thai",
5303 "Tibetan",
5304 "Tonga",
5305 "Turkish",
5306 "Ukrainian",
5307 "Urdu",
5308 "Uzbek",
5309 "Vietnamese",
5310 "Welsh",
5311 "Xhosa"
5312 ];
5313 ?>
5314
5315 <div class="mb-3">
5316 <label for="languageSelect" class="form-label">Post Language:</label>
5317 <select class="form-select" id="languageSelect" name="languageSelect">
5318 <?php foreach ($languages as $language): ?>
5319 <option value="<?php echo esc_attr($language); ?>">
5320 <?php echo esc_html($language); ?>
5321 </option>
5322 <?php endforeach; ?>
5323
5324
5325 </select>
5326 </div>
5327
5328 <div class="mb-3">
5329 <label for="subtitleSelect" class="form-label">Subheading Count:</label>
5330 <select class="form-select" id="subtitleSelect" name="subtitleSelect">
5331 <?php
5332 for ($i = 1; $i <= 10; $i++) {
5333 echo '<option value="' . esc_attr($i) . '">' . esc_html($i) . '</option>';
5334 }
5335 ?>
5336 </select>
5337 </div>
5338
5339 <div class="mb-3">
5340 <label for="narrationSelect" class="form-label">Writing Style:</label>
5341 <select class="form-select" id="narrationSelect" name="narrationSelect">
5342 <?php
5343 $styles = [
5344 "Descriptive" => "Descriptive",
5345 "Narrative" => "Narrative",
5346 "Explanatory" => "Explanatory",
5347 "Argumentative" => "Argumentative",
5348 "Comparative" => "Comparative",
5349 "Process Analysis" => "Process Analysis",
5350 "Allegorical" => "Allegorical",
5351 "Chronological" => "Chronological",
5352 "Ironic" => "Ironic",
5353 "ConsistencyAndRepetition" => "Consistency and Repetition",
5354 "LanguagePlayAndPoeticExpression" => "Language Play and Poetic Expression",
5355 "InternalMonologue" => "Internal Monologue",
5356 "Dialogical" => "Dialogical"
5357 ];
5358 foreach ($styles as $value => $name) {
5359 echo '<option value="' . esc_attr($value) . '">' . esc_html($name) . '</option>';
5360 }
5361 ?>
5362 </select>
5363 </div>
5364
5365 <!-- Custom Tools Section -->
5366 <h3 class="mb-3">Custom Tools</h3>
5367 <div class="accordion mb-4" id="accordionCustomTools">
5368 <!-- Website Tools -->
5369 <div class="accordion-item">
5370 <h2 class="accordion-header" id="headingWebsiteTools">
5371 <div class="d-flex justify-content-between align-items-center w-100">
5372 <button class="accordion-button flex-grow-1" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWebsiteTools" aria-expanded="true" aria-controls="collapseWebsiteTools">
5373 Website Tools
5374 </button>
5375 <div class="form-check form-switch ms-2">
5376 <input class="form-check-input" type="checkbox" role="switch" id="toggle_website_tools" name="enable_website_tools" checked style="transform: scale(1.3);" onchange="toggleAccordion('collapseWebsiteTools', this.checked);">
5377 </div>
5378 </div>
5379 </h2>
5380 <div id="collapseWebsiteTools" class="accordion-collapse collapse show" aria-labelledby="headingWebsiteTools">
5381 <div class="accordion-body">
5382 <div class="mb-3">
5383 <label for="website_tools_knowledge_base_url" class="form-label">Knowledge Base URL</label>
5384 <input type="url" class="form-control" id="website_tools_knowledge_base_url" name="website_tools_knowledge_base_url" placeholder="https://example.com">
5385 <div class="form-text">Enter a valid URL if you want to include a knowledge base. Must be in proper URL format.</div>
5386 </div>
5387 </div>
5388 </div>
5389 </div>
5390
5391 <!-- DuckDuckGO Search -->
5392 <div class="accordion-item">
5393 <h2 class="accordion-header" id="headingDuckDuckGO">
5394 <div class="d-flex justify-content-between align-items-center w-100">
5395 <button class="accordion-button flex-grow-1" type="button" data-bs-toggle="collapse" data-bs-target="#collapseDuckDuckGO" aria-expanded="true" aria-controls="collapseDuckDuckGO">
5396 DuckDuckGO Search
5397 </button>
5398 <div class="form-check form-switch ms-2">
5399 <input class="form-check-input" type="checkbox" role="switch" id="toggle_duckduckgo" name="enable_duckduckgo" checked style="transform: scale(1.3);" onchange="toggleAccordion('collapseDuckDuckGO', this.checked);">
5400 </div>
5401 </div>
5402 </h2>
5403 <div id="collapseDuckDuckGO" class="accordion-collapse collapse show" aria-labelledby="headingDuckDuckGO">
5404 <div class="accordion-body">
5405 <div class="form-check form-switch mb-3">
5406 <input type="checkbox" class="form-check-input" id="duckduckgo_news" name="duckduckgo_news" value="1" checked>
5407 <label class="form-check-label" for="duckduckgo_news">Include News (Default: Enabled)</label>
5408 </div>
5409 <div class="mb-3">
5410 <label for="duckduckgo_fixed_max_results" class="form-label">Fixed Max Results</label>
5411 <input type="number" class="form-control" id="duckduckgo_fixed_max_results" name="duckduckgo_fixed_max_results" placeholder="Enter a number or leave blank">
5412 <div class="form-text">Optional: set a maximum number of results.</div>
5413 </div>
5414 </div>
5415 </div>
5416 </div>
5417
5418 <!-- Wikipedia -->
5419 <div class="accordion-item">
5420 <h2 class="accordion-header" id="headingWikipedia">
5421 <div class="d-flex justify-content-between align-items-center w-100">
5422 <button class="accordion-button flex-grow-1" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWikipedia" aria-expanded="true" aria-controls="collapseWikipedia">
5423 Wikipedia
5424 </button>
5425 <div class="form-check form-switch ms-2">
5426 <input class="form-check-input" type="checkbox" role="switch" id="toggle_wikipedia" name="enable_wikipedia" checked style="transform: scale(1.3);" onchange="toggleAccordion('collapseWikipedia', this.checked);">
5427 </div>
5428 </div>
5429 </h2>
5430 <div id="collapseWikipedia" class="accordion-collapse collapse show" aria-labelledby="headingWikipedia">
5431 <div class="accordion-body">
5432 <div class="mb-3">
5433 <label for="wikipedia_knowledge_base" class="form-label">Knowledge Base Topics</label>
5434 <input type="text" class="form-control" id="wikipedia_knowledge_base" name="wikipedia_knowledge_base" placeholder="topic1, topic2, topic3">
5435 <div class="form-text">Enter topics separated by commas if you want to include a knowledge base.</div>
5436 </div>
5437 </div>
5438 </div>
5439 </div>
5440
5441 <!-- YFinanceTools -->
5442 <div class="accordion-item">
5443 <h2 class="accordion-header" id="headingYFinanceTools">
5444 <div class="d-flex justify-content-between align-items-center w-100">
5445 <button class="accordion-button flex-grow-1" type="button" data-bs-toggle="collapse" data-bs-target="#collapseYFinanceTools" aria-expanded="true" aria-controls="collapseYFinanceTools">
5446 YFinanceTools
5447 </button>
5448 <div class="form-check form-switch ms-2">
5449 <input class="form-check-input" type="checkbox" role="switch" id="toggle_yfinancetools" name="enable_yfinancetools" checked style="transform: scale(1.3);" onchange="toggleAccordion('collapseYFinanceTools', this.checked);">
5450 </div>
5451 </div>
5452 </h2>
5453 <div id="collapseYFinanceTools" class="accordion-collapse collapse show" aria-labelledby="headingYFinanceTools">
5454 <div class="accordion-body">
5455 <div class="form-check form-switch mb-2">
5456 <input type="checkbox" class="form-check-input" id="yfinance_stock_price" name="yfinance_stock_price" value="1" checked>
5457 <label class="form-check-label" for="yfinance_stock_price">Stock Price (Default: Enabled)</label>
5458 </div>
5459 <div class="form-check form-switch mb-2">
5460 <input type="checkbox" class="form-check-input" id="yfinance_company_info" name="yfinance_company_info" value="1">
5461 <label class="form-check-label" for="yfinance_company_info">Company Info</label>
5462 </div>
5463 <div class="form-check form-switch mb-2">
5464 <input type="checkbox" class="form-check-input" id="yfinance_stock_fundamentals" name="yfinance_stock_fundamentals" value="1">
5465 <label class="form-check-label" for="yfinance_stock_fundamentals">Stock Fundamentals</label>
5466 </div>
5467 <div class="form-check form-switch mb-2">
5468 <input type="checkbox" class="form-check-input" id="yfinance_income_statements" name="yfinance_income_statements" value="1">
5469 <label class="form-check-label" for="yfinance_income_statements">Income Statements</label>
5470 </div>
5471 <div class="form-check form-switch mb-2">
5472 <input type="checkbox" class="form-check-input" id="yfinance_key_financial_ratios" name="yfinance_key_financial_ratios" value="1">
5473 <label class="form-check-label" for="yfinance_key_financial_ratios">Key Financial Ratios</label>
5474 </div>
5475 <div class="form-check form-switch mb-2">
5476 <input type="checkbox" class="form-check-input" id="yfinance_analyst_recommendations" name="yfinance_analyst_recommendations" value="1">
5477 <label class="form-check-label" for="yfinance_analyst_recommendations">Analyst Recommendations</label>
5478 </div>
5479 <div class="form-check form-switch mb-2">
5480 <input type="checkbox" class="form-check-input" id="yfinance_company_news" name="yfinance_company_news" value="1">
5481 <label class="form-check-label" for="yfinance_company_news">Company News</label>
5482 </div>
5483 <div class="form-check form-switch mb-2">
5484 <input type="checkbox" class="form-check-input" id="yfinance_technical_indicators" name="yfinance_technical_indicators" value="1">
5485 <label class="form-check-label" for="yfinance_technical_indicators">Technical Indicators</label>
5486 </div>
5487 <div class="form-check form-switch mb-2">
5488 <input type="checkbox" class="form-check-input" id="yfinance_historical_prices" name="yfinance_historical_prices" value="1">
5489 <label class="form-check-label" for="yfinance_historical_prices">Historical Prices</label>
5490 </div>
5491 </div>
5492 </div>
5493 </div>
5494
5495 <!-- Hacker News -->
5496 <div class="accordion-item">
5497 <h2 class="accordion-header" id="headingHackerNews">
5498 <div class="d-flex justify-content-between align-items-center w-100">
5499 <button class="accordion-button flex-grow-1" type="button" data-bs-toggle="collapse" data-bs-target="#collapseHackerNews" aria-expanded="true" aria-controls="collapseHackerNews">
5500 Hacker News
5501 </button>
5502 <div class="form-check form-switch ms-2">
5503 <input class="form-check-input" type="checkbox" role="switch" id="toggle_hackernews" name="enable_hackernews" checked style="transform: scale(1.3);" onchange="toggleAccordion('collapseHackerNews', this.checked);">
5504 </div>
5505 </div>
5506 </h2>
5507 <div id="collapseHackerNews" class="accordion-collapse collapse show" aria-labelledby="headingHackerNews">
5508 <div class="accordion-body">
5509 <div class="form-check form-switch mb-2">
5510 <input type="checkbox" class="form-check-input" id="hackernews_get_top_stories" name="hackernews_get_top_stories" value="1" checked>
5511 <label class="form-check-label" for="hackernews_get_top_stories">Get Top Stories (Default: Enabled)</label>
5512 </div>
5513 <div class="form-check form-switch mb-2">
5514 <input type="checkbox" class="form-check-input" id="hackernews_get_user_details" name="hackernews_get_user_details" value="1" checked>
5515 <label class="form-check-label" for="hackernews_get_user_details">Get User Details (Default: Enabled)</label>
5516 </div>
5517 </div>
5518 </div>
5519 </div>
5520 </div> <!-- End of accordionCustomTools -->
5521
5522 <!-- Knowledge Base Section (3 Separate Items) -->
5523 <h3 class="mb-3">Knowledge Base</h3>
5524 <div class="accordion mb-4" id="accordionKnowledgeBase">
5525 <!-- PDF Knowledge Base -->
5526 <div class="accordion-item">
5527 <h2 class="accordion-header" id="headingPDFKB">
5528 <div class="d-flex justify-content-between align-items-center w-100">
5529 <button class="accordion-button collapsed flex-grow-1" type="button" data-bs-toggle="collapse" data-bs-target="#collapsePDFKB" aria-expanded="false" aria-controls="collapsePDFKB">
5530 PDF Knowledge Base
5531 </button>
5532 <div class="form-check form-switch ms-2">
5533 <input class="form-check-input" type="checkbox" role="switch" id="toggle_pdf_kb" name="enable_pdf_kb" style="transform: scale(1.3);" onchange="toggleAccordion('collapsePDFKB', this.checked);">
5534 </div>
5535 </div>
5536 </h2>
5537 <div id="collapsePDFKB" class="accordion-collapse collapse" aria-labelledby="headingPDFKB">
5538 <div class="accordion-body">
5539 <div class="mb-3">
5540 <label for="pdf_url_knowledge_base" class="form-label">PDF URL Knowledge Base</label>
5541 <input type="url" class="form-control" id="pdf_url_knowledge_base" name="pdf_url_knowledge_base" placeholder="https://example.com/document.pdf">
5542 <div class="form-text">Provide a URL to a PDF document. If filled, it must point to a valid PDF file.</div>
5543 </div>
5544 </div>
5545 </div>
5546 </div>
5547 <!-- CSV Knowledge Base -->
5548 <div class="accordion-item">
5549 <h2 class="accordion-header" id="headingCSVKB">
5550 <div class="d-flex justify-content-between align-items-center w-100">
5551 <button class="accordion-button collapsed flex-grow-1" type="button" data-bs-toggle="collapse" data-bs-target="#collapseCSVKB" aria-expanded="false" aria-controls="collapseCSVKB">
5552 CSV Knowledge Base
5553 </button>
5554 <div class="form-check form-switch ms-2">
5555 <input class="form-check-input" type="checkbox" role="switch" id="toggle_csv_kb" name="enable_csv_kb" style="transform: scale(1.3);" onchange="toggleAccordion('collapseCSVKB', this.checked);">
5556 </div>
5557 </div>
5558 </h2>
5559 <div id="collapseCSVKB" class="accordion-collapse collapse" aria-labelledby="headingCSVKB">
5560 <div class="accordion-body">
5561 <div class="mb-3">
5562 <label for="csv_url_knowledge_base" class="form-label">CSV URL Knowledge Base</label>
5563 <input type="url" class="form-control" id="csv_url_knowledge_base" name="csv_url_knowledge_base" placeholder="https://example.com/data.csv">
5564 <div class="form-text">Provide a URL to a CSV file. If filled, it must be a valid URL.</div>
5565 </div>
5566 </div>
5567 </div>
5568 </div>
5569 <!-- Text Knowledge Base -->
5570 <div class="accordion-item">
5571 <h2 class="accordion-header" id="headingTextKB">
5572 <div class="d-flex justify-content-between align-items-center w-100">
5573 <button class="accordion-button collapsed flex-grow-1" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTextKB" aria-expanded="false" aria-controls="collapseTextKB">
5574 Text Knowledge Base
5575 </button>
5576 <div class="form-check form-switch ms-2">
5577 <input class="form-check-input" type="checkbox" role="switch" id="toggle_text_kb" name="enable_text_kb" style="transform: scale(1.3);" onchange="toggleAccordion('collapseTextKB', this.checked);">
5578 </div>
5579 </div>
5580 </h2>
5581 <div id="collapseTextKB" class="accordion-collapse collapse" aria-labelledby="headingTextKB">
5582 <div class="accordion-body">
5583 <div class="mb-3">
5584 <label for="text_knowledge_base" class="form-label">Text Knowledge Base</label>
5585 <textarea class="form-control" id="text_knowledge_base" name="text_knowledge_base" rows="5" placeholder="Enter your knowledge base text here..."></textarea>
5586 <div class="form-text">Enter plain text for your knowledge base. This field supports a longer description.</div>
5587 </div>
5588 </div>
5589 </div>
5590 </div>
5591 </div> <!-- End of accordionKnowledgeBase -->
5592
5593 <div class="mb-3">
5594 <button type="submit" name="submit" id="submit" class="btn btn-primary">Generate Post</button>
5595 </div>
5596 </form>
5597 </div><!-- .inside -->
5598 </div><!-- .postbox -->
5599 </div><!-- .meta-box-sortables -->
5600 </div><!-- .col-md-9 -->
5601 </div><!-- #post-body-content -->
5602 </div><!-- #poststuff -->
5603 </div><!-- .wrap -->
5604
5605 <!-- Inline JavaScript to handle toggle-controlled accordion behavior -->
5606 <script>
5607 function toggleAccordion(collapseId, isActive) {
5608 var collapseElement = document.getElementById(collapseId);
5609 var bsCollapse = new bootstrap.Collapse(collapseElement, {
5610 toggle: false
5611 });
5612 if (isActive) {
5613 bsCollapse.show();
5614 } else {
5615 bsCollapse.hide();
5616 }
5617 }
5618 </script>
5619 <?php
5620 }
5621
5622
5623
5624
5625
5626
5627 function autowp_manual_post_ai_form_page_handler() {
5628
5629 if (isset($_POST['_wpnonce']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['_wpnonce'])), 'autowp_manual_post_ai_nonce')) {
5630
5631 $form_data = $_POST;
5632
5633 $form_data['website_type'] = 'ai';
5634
5635 $form_data['content_prompt'] = '[autowp-promptcode]' .
5636 sanitize_text_field($form_data['keywordInput']) . ',' .
5637 'aiGenerated' . ',' .
5638 sanitize_text_field($form_data['countrySelect']) . ',' .
5639 sanitize_text_field($form_data['languageSelect']) . ',' .
5640 sanitize_text_field($form_data['subtitleSelect']) . ',' .
5641 sanitize_text_field($form_data['narrationSelect']) .
5642 '[/autowp-promptcode]';
5643
5644 $validate_form = autowp_validate_website($form_data,true);
5645
5646
5647
5648 if($validate_form === true){
5649 autowp_show_alert_with_message(true,'Your process successfully started!');
5650 schedule_autowp_manual_post_rss_event($form_data);
5651 }else{
5652
5653
5654 autowp_show_alert_with_message(false,$validate_form);
5655
5656 }
5657
5658
5659
5660
5661 }
5662 //autowp_manual_post_ai_form_page_setOptions();
5663 ?>
5664
5665 <div class="wrap">
5666 <h1>Manual Post - AI</h1>
5667 <a href="javascript:history.back()" class="btn btn-primary">Go Back</a>
5668
5669 <div id="poststuff">
5670 <div id="post-body" class="metabox-holder">
5671 <!-- Main Content -->
5672 <div id="post-body-content" class="row">
5673 <div class="col-md-9">
5674 <div class="meta-box-sortables ui-sortable">
5675 <div class="postbox">
5676 <h2 class="hndle ui-sortable-handle">AI Settings</h2>
5677 <div class="inside">
5678 <form method="post">
5679 <?php wp_nonce_field('autowp_manual_post_ai_nonce', '_wpnonce'); ?>
5680 <form class="row g-3" id="post_generation_form">
5681 <div class="col-md-6">
5682 <div class="mb-3">
5683 <label for="author_selection" class="form-label"><?php esc_html_e('Author Selection', 'autowp'); ?></label>
5684 <select name="author_selection" class="form-select">
5685 <?php
5686 $authors = get_users();
5687
5688 foreach ($authors as $author) {
5689 $author_id = $author->ID;
5690 $author_name = $author->display_name;
5691 $author_description = get_the_author_meta('description', $author_id);
5692
5693 echo '<option value="' . esc_attr($author_id) . '">' . esc_html($author_name) . '</option>';
5694 }
5695 ?>
5696 </select>
5697 <p class="form-text"><?php esc_html_e('Select an author from the list.', 'autowp'); ?></p>
5698 </div>
5699
5700 <div class="mb-3">
5701 <label for="category_id" class="form-label">Categories:</label>
5702 <select id="category_id" name="category_id[]" required multiple class="form-select">
5703 <?php
5704 $categories = get_categories(array(
5705 'orderby' => 'name',
5706 'order' => 'ASC',
5707 'hide_empty' => false
5708 ));
5709
5710 foreach ($categories as $category) {
5711 echo '<option value="' . esc_attr($category->term_id) . '">' . esc_html($category->name) . '</option>';
5712 }
5713 ?>
5714 </select>
5715 </div>
5716
5717 <div class="mb-3">
5718 <label class="form-check-label">AI Settings :</label>
5719 <div class="form-check">
5720 <br>
5721 <input type="checkbox" id="aigenerated_image" name="aigenerated_image" value="1" class="form-check-input">
5722 <label for="aigenerated_image" class="form-check-label">Generated thumbnail with AI (SEO Friendly)</label>
5723 </div>
5724 </div>
5725
5726 <div class="col-md-6">
5727 <label class="form-label" for="image_generating_status"><?php esc_html_e('Image Generating Method', 'autowp'); ?></label>
5728 <select name="image_generating_status" class="form-select">
5729 <option value="0"><?php esc_html_e('FLUX Realism LoRA', 'autowp'); ?></option>
5730 <option value="1"><?php esc_html_e('Stable Diffusion Ultra', 'autowp'); ?></option>
5731 <option value="2"><?php esc_html_e('Stable Diffusion Core', 'autowp'); ?></option>
5732 <option value="3"><?php esc_html_e('DALL-E 2', 'autowp'); ?></option>
5733 <option value="4"><?php esc_html_e('DALL-E 3', 'autowp'); ?></option>
5734 <option value="5"><?php esc_html_e('DuckDuckGo Search', 'autowp'); ?></option>
5735
5736 <option value="6"><?php esc_html_e('Default Image', 'autowp'); ?></option>
5737 <option value="7"><?php esc_html_e('No Image', 'autowp'); ?></option>
5738 </select>
5739 <p class="form-text"><?php esc_html_e('By default FLUX Realism LoRA is selected.', 'autowp'); ?></p>
5740 </div>
5741
5742
5743
5744
5745
5746
5747 <h4 style="font-weight: bold;">Post Settings</h4>
5748 <!-- Integration of your initial form inputs starts here -->
5749 <div class="mb-3">
5750 <label for="keywordInput" class="form-label">Keyword:</label>
5751 <input type="text" class="form-control" id="keywordInput" name="keywordInput" placeholder="Enter keyword" value="" required class="form-control">
5752 </div>
5753
5754 <div class="mb-3">
5755 <label for="countrySelect" class="form-label">Country:</label>
5756 <select class="form-select" id="countrySelect" name="countrySelect">
5757 <!-- Countries list -->
5758 <?php
5759 $countries = array
5760 (
5761 'AF' => 'Afghanistan',
5762 'AX' => 'Aland Islands',
5763 'AL' => 'Albania',
5764 'DZ' => 'Algeria',
5765 'AS' => 'American Samoa',
5766 'AD' => 'Andorra',
5767 'AO' => 'Angola',
5768 'AI' => 'Anguilla',
5769 'AQ' => 'Antarctica',
5770 'AG' => 'Antigua And Barbuda',
5771 'AR' => 'Argentina',
5772 'AM' => 'Armenia',
5773 'AW' => 'Aruba',
5774 'AU' => 'Australia',
5775 'AT' => 'Austria',
5776 'AZ' => 'Azerbaijan',
5777 'BS' => 'Bahamas',
5778 'BH' => 'Bahrain',
5779 'BD' => 'Bangladesh',
5780 'BB' => 'Barbados',
5781 'BY' => 'Belarus',
5782 'BE' => 'Belgium',
5783 'BZ' => 'Belize',
5784 'BJ' => 'Benin',
5785 'BM' => 'Bermuda',
5786 'BT' => 'Bhutan',
5787 'BO' => 'Bolivia',
5788 'BA' => 'Bosnia And Herzegovina',
5789 'BW' => 'Botswana',
5790 'BV' => 'Bouvet Island',
5791 'BR' => 'Brazil',
5792 'IO' => 'British Indian Ocean Territory',
5793 'BN' => 'Brunei Darussalam',
5794 'BG' => 'Bulgaria',
5795 'BF' => 'Burkina Faso',
5796 'BI' => 'Burundi',
5797 'KH' => 'Cambodia',
5798 'CM' => 'Cameroon',
5799 'CA' => 'Canada',
5800 'CV' => 'Cape Verde',
5801 'KY' => 'Cayman Islands',
5802 'CF' => 'Central African Republic',
5803 'TD' => 'Chad',
5804 'CL' => 'Chile',
5805 'CN' => 'China',
5806 'CX' => 'Christmas Island',
5807 'CC' => 'Cocos (Keeling) Islands',
5808 'CO' => 'Colombia',
5809 'KM' => 'Comoros',
5810 'CG' => 'Congo',
5811 'CD' => 'Congo, Democratic Republic',
5812 'CK' => 'Cook Islands',
5813 'CR' => 'Costa Rica',
5814 'CI' => 'Cote D\'Ivoire',
5815 'HR' => 'Croatia',
5816 'CU' => 'Cuba',
5817 'CY' => 'Cyprus',
5818 'CZ' => 'Czech Republic',
5819 'DK' => 'Denmark',
5820 'DJ' => 'Djibouti',
5821 'DM' => 'Dominica',
5822 'DO' => 'Dominican Republic',
5823 'EC' => 'Ecuador',
5824 'EG' => 'Egypt',
5825 'SV' => 'El Salvador',
5826 'GQ' => 'Equatorial Guinea',
5827 'ER' => 'Eritrea',
5828 'EE' => 'Estonia',
5829 'ET' => 'Ethiopia',
5830 'FK' => 'Falkland Islands (Malvinas)',
5831 'FO' => 'Faroe Islands',
5832 'FJ' => 'Fiji',
5833 'FI' => 'Finland',
5834 'FR' => 'France',
5835 'GF' => 'French Guiana',
5836 'PF' => 'French Polynesia',
5837 'TF' => 'French Southern Territories',
5838 'GA' => 'Gabon',
5839 'GM' => 'Gambia',
5840 'GE' => 'Georgia',
5841 'DE' => 'Germany',
5842 'GH' => 'Ghana',
5843 'GI' => 'Gibraltar',
5844 'GR' => 'Greece',
5845 'GL' => 'Greenland',
5846 'GD' => 'Grenada',
5847 'GP' => 'Guadeloupe',
5848 'GU' => 'Guam',
5849 'GT' => 'Guatemala',
5850 'GG' => 'Guernsey',
5851 'GN' => 'Guinea',
5852 'GW' => 'Guinea-Bissau',
5853 'GY' => 'Guyana',
5854 'HT' => 'Haiti',
5855 'HM' => 'Heard Island & Mcdonald Islands',
5856 'VA' => 'Holy See (Vatican City State)',
5857 'HN' => 'Honduras',
5858 'HK' => 'Hong Kong',
5859 'HU' => 'Hungary',
5860 'IS' => 'Iceland',
5861 'IN' => 'India',
5862 'ID' => 'Indonesia',
5863 'IR' => 'Iran, Islamic Republic Of',
5864 'IQ' => 'Iraq',
5865 'IE' => 'Ireland',
5866 'IM' => 'Isle Of Man',
5867 'IL' => 'Israel',
5868 'IT' => 'Italy',
5869 'JM' => 'Jamaica',
5870 'JP' => 'Japan',
5871 'JE' => 'Jersey',
5872 'JO' => 'Jordan',
5873 'KZ' => 'Kazakhstan',
5874 'KE' => 'Kenya',
5875 'KI' => 'Kiribati',
5876 'KR' => 'Korea',
5877 'KW' => 'Kuwait',
5878 'KG' => 'Kyrgyzstan',
5879 'LA' => 'Lao People\'s Democratic Republic',
5880 'LV' => 'Latvia',
5881 'LB' => 'Lebanon',
5882 'LS' => 'Lesotho',
5883 'LR' => 'Liberia',
5884 'LY' => 'Libyan Arab Jamahiriya',
5885 'LI' => 'Liechtenstein',
5886 'LT' => 'Lithuania',
5887 'LU' => 'Luxembourg',
5888 'MO' => 'Macao',
5889 'MK' => 'Macedonia',
5890 'MG' => 'Madagascar',
5891 'MW' => 'Malawi',
5892 'MY' => 'Malaysia',
5893 'MV' => 'Maldives',
5894 'ML' => 'Mali',
5895 'MT' => 'Malta',
5896 'MH' => 'Marshall Islands',
5897 'MQ' => 'Martinique',
5898 'MR' => 'Mauritania',
5899 'MU' => 'Mauritius',
5900 'YT' => 'Mayotte',
5901 'MX' => 'Mexico',
5902 'FM' => 'Micronesia, Federated States Of',
5903 'MD' => 'Moldova',
5904 'MC' => 'Monaco',
5905 'MN' => 'Mongolia',
5906 'ME' => 'Montenegro',
5907 'MS' => 'Montserrat',
5908 'MA' => 'Morocco',
5909 'MZ' => 'Mozambique',
5910 'MM' => 'Myanmar',
5911 'NA' => 'Namibia',
5912 'NR' => 'Nauru',
5913 'NP' => 'Nepal',
5914 'NL' => 'Netherlands',
5915 'AN' => 'Netherlands Antilles',
5916 'NC' => 'New Caledonia',
5917 'NZ' => 'New Zealand',
5918 'NI' => 'Nicaragua',
5919 'NE' => 'Niger',
5920 'NG' => 'Nigeria',
5921 'NU' => 'Niue',
5922 'NF' => 'Norfolk Island',
5923 'MP' => 'Northern Mariana Islands',
5924 'NO' => 'Norway',
5925 'OM' => 'Oman',
5926 'PK' => 'Pakistan',
5927 'PW' => 'Palau',
5928 'PS' => 'Palestinian Territory, Occupied',
5929 'PA' => 'Panama',
5930 'PG' => 'Papua New Guinea',
5931 'PY' => 'Paraguay',
5932 'PE' => 'Peru',
5933 'PH' => 'Philippines',
5934 'PN' => 'Pitcairn',
5935 'PL' => 'Poland',
5936 'PT' => 'Portugal',
5937 'PR' => 'Puerto Rico',
5938 'QA' => 'Qatar',
5939 'RE' => 'Reunion',
5940 'RO' => 'Romania',
5941 'RU' => 'Russian Federation',
5942 'RW' => 'Rwanda',
5943 'BL' => 'Saint Barthelemy',
5944 'SH' => 'Saint Helena',
5945 'KN' => 'Saint Kitts And Nevis',
5946 'LC' => 'Saint Lucia',
5947 'MF' => 'Saint Martin',
5948 'PM' => 'Saint Pierre And Miquelon',
5949 'VC' => 'Saint Vincent And Grenadines',
5950 'WS' => 'Samoa',
5951 'SM' => 'San Marino',
5952 'ST' => 'Sao Tome And Principe',
5953 'SA' => 'Saudi Arabia',
5954 'SN' => 'Senegal',
5955 'RS' => 'Serbia',
5956 'SC' => 'Seychelles',
5957 'SL' => 'Sierra Leone',
5958 'SG' => 'Singapore',
5959 'SK' => 'Slovakia',
5960 'SI' => 'Slovenia',
5961 'SB' => 'Solomon Islands',
5962 'SO' => 'Somalia',
5963 'ZA' => 'South Africa',
5964 'GS' => 'South Georgia And Sandwich Isl.',
5965 'ES' => 'Spain',
5966 'LK' => 'Sri Lanka',
5967 'SD' => 'Sudan',
5968 'SR' => 'Suriname',
5969 'SJ' => 'Svalbard And Jan Mayen',
5970 'SZ' => 'Swaziland',
5971 'SE' => 'Sweden',
5972 'CH' => 'Switzerland',
5973 'SY' => 'Syrian Arab Republic',
5974 'TW' => 'Taiwan',
5975 'TJ' => 'Tajikistan',
5976 'TZ' => 'Tanzania',
5977 'TH' => 'Thailand',
5978 'TL' => 'Timor-Leste',
5979 'TG' => 'Togo',
5980 'TK' => 'Tokelau',
5981 'TO' => 'Tonga',
5982 'TT' => 'Trinidad And Tobago',
5983 'TN' => 'Tunisia',
5984 'TR' => 'Turkey',
5985 'TM' => 'Turkmenistan',
5986 'TC' => 'Turks And Caicos Islands',
5987 'TV' => 'Tuvalu',
5988 'UG' => 'Uganda',
5989 'UA' => 'Ukraine',
5990 'AE' => 'United Arab Emirates',
5991 'GB' => 'United Kingdom',
5992 'US' => 'United States',
5993 'UM' => 'United States Outlying Islands',
5994 'UY' => 'Uruguay',
5995 'UZ' => 'Uzbekistan',
5996 'VU' => 'Vanuatu',
5997 'VE' => 'Venezuela',
5998 'VN' => 'Viet Nam',
5999 'VG' => 'Virgin Islands, British',
6000 'VI' => 'Virgin Islands, U.S.',
6001 'WF' => 'Wallis And Futuna',
6002 'EH' => 'Western Sahara',
6003 'YE' => 'Yemen',
6004 'ZM' => 'Zambia',
6005 'ZW' => 'Zimbabwe',
6006 );
6007
6008 foreach ($countries as $code => $name) {
6009 echo '<option value="' . esc_attr($code) . '">' . esc_html($name) . '</option>';
6010 }
6011
6012 ?>
6013 </select>
6014 </div>
6015 <?php
6016 $languages = [
6017 "Afrikaans",
6018 "Albanian",
6019 "Arabic",
6020 "Armenian",
6021 "Basque",
6022 "Bengali",
6023 "Bulgarian",
6024 "Catalan",
6025 "Cambodian",
6026 "Chinese (Mandarin)",
6027 "Croatian",
6028 "Czech",
6029 "Danish",
6030 "Dutch",
6031 "English",
6032 "Estonian",
6033 "Fiji",
6034 "Finnish",
6035 "French",
6036 "Georgian",
6037 "German",
6038 "Greek",
6039 "Gujarati",
6040 "Hebrew",
6041 "Hindi",
6042 "Hungarian",
6043 "Icelandic",
6044 "Indonesian",
6045 "Irish",
6046 "Italian",
6047 "Japanese",
6048 "Javanese",
6049 "Korean",
6050 "Latin",
6051 "Latvian",
6052 "Lithuanian",
6053 "Macedonian",
6054 "Malay",
6055 "Malayalam",
6056 "Maltese",
6057 "Maori",
6058 "Marathi",
6059 "Mongolian",
6060 "Nepali",
6061 "Norwegian",
6062 "Persian",
6063 "Polish",
6064 "Portuguese",
6065 "Punjabi",
6066 "Quechua",
6067 "Romanian",
6068 "Russian",
6069 "Samoan",
6070 "Serbian",
6071 "Slovak",
6072 "Slovenian",
6073 "Spanish",
6074 "Swahili",
6075 "Swedish",
6076 "Tamil",
6077 "Tatar",
6078 "Telugu",
6079 "Thai",
6080 "Tibetan",
6081 "Tonga",
6082 "Turkish",
6083 "Ukrainian",
6084 "Urdu",
6085 "Uzbek",
6086 "Vietnamese",
6087 "Welsh",
6088 "Xhosa"
6089 ];
6090 ?>
6091
6092 <div class="mb-3">
6093 <label for="languageSelect" class="form-label">Post Language:</label>
6094 <select class="form-select" id="languageSelect" name="languageSelect">
6095 <?php foreach ($languages as $language): ?>
6096 <option value="<?php echo esc_attr($language); ?>">
6097 <?php echo esc_html($language); ?>
6098 </option>
6099 <?php endforeach; ?>
6100
6101
6102 </select>
6103 </div>
6104
6105 <div class="mb-3">
6106 <label for="subtitleSelect" class="form-label">Subheading Count:</label>
6107 <select class="form-select" id="subtitleSelect" name="subtitleSelect">
6108 <?php
6109 for ($i = 1; $i <= 10; $i++) {
6110 echo '<option value="' . esc_attr($i) . '">' . esc_html($i) . '</option>';
6111 }
6112 ?>
6113 </select>
6114 </div>
6115
6116 <div class="mb-3">
6117 <label for="narrationSelect" class="form-label">Writing Style:</label>
6118 <select class="form-select" id="narrationSelect" name="narrationSelect">
6119 <?php
6120 $styles = [
6121 "Descriptive" => "Descriptive",
6122 "Narrative" => "Narrative",
6123 "Explanatory" => "Explanatory",
6124 "Argumentative" => "Argumentative",
6125 "Comparative" => "Comparative",
6126 "Process Analysis" => "Process Analysis",
6127 "Allegorical" => "Allegorical",
6128 "Chronological" => "Chronological",
6129 "Ironic" => "Ironic",
6130 "ConsistencyAndRepetition" => "Consistency and Repetition",
6131 "LanguagePlayAndPoeticExpression" => "Language Play and Poetic Expression",
6132 "InternalMonologue" => "Internal Monologue",
6133 "Dialogical" => "Dialogical"
6134 ];
6135 foreach ($styles as $value => $name) {
6136 echo '<option value="' . esc_attr($value) . '">' . esc_html($name) . '</option>';
6137 }
6138 ?>
6139 </select>
6140 </div>
6141
6142
6143
6144
6145
6146
6147 <div class="mb-3">
6148 <p class="submit">
6149 <input type="submit" name="submit" id="submit" class="btn btn-primary" value="Generate Post">
6150 </p>
6151 </div>
6152
6153
6154 </form>
6155 </div>
6156 </div>
6157 </div>
6158 </div>
6159 <!-- Sidebar -->
6160 </div>
6161 </div>
6162 </div>
6163 </div>
6164 <?php
6165 }
6166
6167 function autowp_prompt_settings_page_handler(){
6168 ?>
6169 <div class="wrap">
6170 <h2><?php esc_html_e('Content Schemes', 'autowp'); ?></h2>
6171 <p class="lead"><?php esc_html_e('Select ', 'autowp'); ?></p>
6172 <ul class="list-group">
6173
6174 <!-- Writing Prompt Scheme Option -->
6175 <li class="list-group-item">
6176 <a href="<?php echo esc_url(get_admin_url(null, 'admin.php?page=autowp_promptschemes')); ?>" class="d-flex justify-content-between align-items-center">
6177 <div class="d-flex align-items-center">
6178 <img src="<?php echo esc_url(plugins_url('assets/images/wordpress-icon.png', __FILE__)); ?>" alt="<?php esc_attr_e('Writing Prompt Scheme', 'autowp'); ?>" class="me-3" style="width: 80px; height: 80px;">
6179 <div>
6180 <h5 class="mb-1"><?php esc_html_e('Writing Prompt Scheme', 'autowp'); ?></h5>
6181 <p class="mb-0"><?php esc_html_e('Create a prompt scheme from scratch for generating new posts.', 'autowp'); ?></p>
6182 </div>
6183 </div>
6184 </a>
6185 </li>
6186
6187 <!-- Rewriting Prompt Scheme Option -->
6188 <li class="list-group-item">
6189 <a href="<?php echo esc_url(get_admin_url(null, 'admin.php?page=autowp_rewriting_promptschemes')); ?>" class="d-flex justify-content-between align-items-center">
6190 <div class="d-flex align-items-center">
6191 <img src="<?php echo esc_url(plugins_url('assets/images/rss-icon.png', __FILE__)); ?>" alt="<?php esc_attr_e('Rewriting Prompt Scheme', 'autowp'); ?>" class="me-3" style="width: 80px; height: 80px;">
6192 <div>
6193 <h5 class="mb-1"><?php esc_html_e('Rewriting Prompt Scheme', 'autowp'); ?></h5>
6194 <p class="mb-0"><?php esc_html_e('Create a prompt scheme that rewrites posts based on source content (e.g., RSS Feeds).', 'autowp'); ?></p>
6195 </div>
6196 </div>
6197 </a>
6198 </li>
6199
6200 <!-- Other Prompt Settings Option -->
6201 <li class="list-group-item">
6202 <a href="<?php echo esc_url(get_admin_url(null, 'admin.php?page=manual_post_ai_website_form')); ?>" class="d-flex justify-content-between align-items-center">
6203 <div class="d-flex align-items-center">
6204 <img src="<?php echo esc_url(plugins_url('assets/images/robot-icon.png', __FILE__)); ?>" alt="<?php esc_attr_e('Other Prompt Settings', 'autowp'); ?>" class="me-3" style="width: 80px; height: 80px;">
6205 <div>
6206 <h5 class="mb-1"><?php esc_html_e('Other Prompt Settings', 'autowp'); ?></h5>
6207 <p class="mb-0"><?php esc_html_e('Customize titles, keywords, thumbnails, tags, and other prompt settings.', 'autowp'); ?></p>
6208 </div>
6209 </div>
6210 </a>
6211 </li>
6212
6213 <!-- Video Tutorials Option (with modal trigger) -->
6214 <li class="list-group-item">
6215 <a href="#" data-bs-toggle="modal" data-bs-target="#tutorialModal" class="d-flex justify-content-between align-items-center">
6216 <div class="d-flex align-items-center">
6217 <img src="<?php echo esc_url(plugins_url('assets/images/tutorial.png', __FILE__)); ?>" alt="<?php esc_attr_e('Video Tutorials', 'autowp'); ?>" class="me-3" style="width: 80px; height: 80px;">
6218 <div>
6219 <h5 class="mb-1"><?php esc_html_e('Video Tutorials', 'autowp'); ?></h5>
6220 <p class="mb-0"><?php esc_html_e('Watch tutorials to learn how to configure and use the AI prompt settings.', 'autowp'); ?></p>
6221 </div>
6222 </div>
6223 </a>
6224 </li>
6225
6226 </ul>
6227
6228 <!-- Bootstrap Modal -->
6229 <div class="modal fade" id="tutorialModal" tabindex="-1" aria-labelledby="tutorialModalLabel" aria-hidden="true">
6230 <div class="modal-dialog modal-dialog-centered">
6231 <div class="modal-content">
6232 <div class="modal-header">
6233 <h5 class="modal-title" id="tutorialModalLabel"><?php esc_html_e('Video Tutorials', 'autowp'); ?></h5>
6234 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
6235 </div>
6236 <div class="modal-body">
6237 <div class="mb-3">
6238 <h5><?php esc_html_e('Manual Processes', 'autowp'); ?></h5>
6239 <p><?php esc_html_e('Once you click "Generate Post", the process will run in the background, typically taking about 5 minutes. You can monitor errors or progress in the WordPress admin panel.', 'autowp'); ?></p>
6240 </div>
6241
6242 <div class="mb-3">
6243 <h5><?php esc_html_e('Automatic Processes', 'autowp'); ?></h5>
6244 <p><?php esc_html_e('Automatic processes are triggered based on the cron schedule you set in the settings. Make sure to configure the interval after adding new processes.', 'autowp'); ?></p>
6245 </div>
6246
6247 <!-- Video Tutorials Section -->
6248 <div class="mb-3">
6249 <h6><?php esc_html_e('How to Generate Posts with AI', 'autowp'); ?></h6>
6250 <iframe width="450" height="350" src="https://www.youtube.com/embed/p5KpM9eZftE" frameborder="0" allowfullscreen></iframe>
6251 </div>
6252
6253 <div class="mb-3">
6254 <h6><?php esc_html_e('How to Rewrite Posts with AI from RSS Feed', 'autowp'); ?></h6>
6255 <iframe width="450" height="350" src="https://www.youtube.com/embed/A-wTvmlz7og" frameborder="0" allowfullscreen></iframe>
6256 </div>
6257
6258 <div class="mb-3">
6259 <h6><?php esc_html_e('How to Rewrite Posts with AI from WordPress Websites', 'autowp'); ?></h6>
6260 <iframe width="450" height="350" src="https://www.youtube.com/embed/xo9IbyZ_HXY" frameborder="0" allowfullscreen></iframe>
6261 </div>
6262
6263 <div class="mb-3">
6264 <h6><?php esc_html_e('How to Rewrite Posts with AI from Google News', 'autowp'); ?></h6>
6265 <iframe width="450" height="350" src="https://www.youtube.com/embed/z8sM2953VBQ" frameborder="0" allowfullscreen></iframe>
6266 </div>
6267 </div>
6268 <div class="modal-footer">
6269 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal"><?php esc_html_e('Close', 'autowp'); ?></button>
6270 </div>
6271 </div>
6272 </div>
6273 </div>
6274
6275 </div>
6276 <?php
6277 }
6278
6279
6280 function autowp_setup_page() {
6281 $user_email = wp_get_current_user()->user_email;
6282
6283 ?>
6284 <div class="wrap">
6285 <h1><?php esc_html_e('AutoWP Setup', 'autowp'); ?></h1>
6286 <form method="post" class="form-horizontal" id="autowp-setup-form">
6287 <fieldset>
6288 <legend><?php esc_html_e('API Registration', 'autowp'); ?></legend>
6289
6290 <!-- Email -->
6291 <div class="form-group">
6292 <label class="col-md-4 control-label" for="api_email"><?php esc_html_e('Email', 'autowp'); ?></label>
6293 <div class="col-md-4">
6294 <input id="api_email" name="api_email" type="text" class="form-control" value="<?php echo esc_attr($user_email); ?>" placeholder="<?php esc_html_e('Enter your email', 'autowp'); ?>">
6295 <p class="help-block"><?php esc_html_e('This email will be used to register and retrieve your API key.', 'autowp'); ?></p>
6296 </div>
6297 </div>
6298
6299 <!-- API Key -->
6300 <div class="form-group">
6301 <label class="col-md-4 control-label" for="api_key"><?php esc_html_e('API Key', 'autowp'); ?></label>
6302 <div class="col-md-4">
6303 <input id="api_key" name="api_key" type="text" class="form-control" placeholder="<?php esc_html_e('Enter your API key', 'autowp'); ?>">
6304 <p class="help-block"><?php esc_html_e('If you don’t have an API key, use the button below to request one.', 'autowp'); ?></p>
6305 </div>
6306 </div>
6307
6308 <!-- Request API Key Button -->
6309 <div class="form-group">
6310 <div class="col-md-4 col-md-offset-4">
6311 <button type="button" id="request_api_key" class="btn btn-info"><?php esc_html_e('Request API Key', 'autowp'); ?></button>
6312 </div>
6313 </div>
6314
6315 <!-- Save Settings Button -->
6316 <div class="form-group" style="margin-top: 20px;">
6317 <div class="col-md-4 col-md-offset-4">
6318 <button type="submit" class="btn btn-primary"><?php esc_html_e('Save Settings', 'autowp'); ?></button>
6319 </div>
6320 </div>
6321
6322 </fieldset>
6323 </form>
6324
6325 <!-- Bilgilendirme Mesajları -->
6326 <div id="autowp-messages"></div>
6327 </div>
6328
6329 <script>
6330 jQuery(document).ready(function($) {
6331 // Request API Key Button Click Event
6332 $('#request_api_key').click(function() {
6333 var email = $('#api_email').val();
6334
6335 if (!email) {
6336 $('#autowp-messages').html('<div class="alert alert-danger">Please enter an email address.</div>');
6337 return;
6338 }
6339
6340 // API çağrısını yap
6341 // API çağrısını yap
6342 $.ajax({
6343 url: 'https://api.autowp.app/register_email',
6344 type: 'POST',
6345 contentType: 'application/json',
6346 data: JSON.stringify({ user_email: email }),
6347 success: function(response) {
6348 $('#autowp-messages').html('<div class="alert alert-success">API key has been sent to your email.</div>');
6349 },
6350 error: function(xhr, status, error) {
6351 var errorMessage = 'Error occurred while requesting API key. Please try again later.';
6352
6353 // Hata mesajını API'den gelen cevaba göre ayarla
6354 if (xhr.responseJSON && xhr.responseJSON.error) {
6355 errorMessage = xhr.responseJSON.error;
6356 } else if (xhr.responseText) {
6357 // JSON değilse ham yanıtı göster
6358 errorMessage = xhr.responseText;
6359 }
6360
6361 $('#autowp-messages').html('<div class="alert alert-danger">' + errorMessage + '</div>');
6362 }
6363 });
6364
6365 });
6366
6367 // Save Settings Button Click Event
6368 $('#autowp-setup-form').submit(function(event) {
6369 event.preventDefault(); // Formun varsayılan davranışını engelle
6370
6371 var email = $('#api_email').val();
6372 var api_key = $('#api_key').val();
6373
6374 if (!email || !api_key) {
6375 $('#autowp-messages').html('<div class="alert alert-danger">Email and API key cannot be empty.</div>');
6376 return;
6377 }
6378
6379 // API confirm_email çağrısını yap
6380 $.ajax({
6381 url: 'https://api.autowp.app/confirm_email',
6382 type: 'POST',
6383 contentType: 'application/json',
6384 data: JSON.stringify({ user_email: email, api_key: api_key }),
6385 success: function(response) {
6386 // Başarılı ise bilgileri kaydet
6387 var settings = {
6388 'api_email': email,
6389 'api_key': api_key
6390 };
6391
6392 // AJAX ile WordPress'te settings güncelle
6393 $.ajax({
6394 url: ajaxurl, // WordPress'in global ajax URL'si
6395 type: 'POST',
6396 data: {
6397 action: 'save_autowp_settings',
6398 settings: settings
6399 },
6400 success: function() {
6401 $('#autowp-messages').html('<div class="alert alert-success">API settings saved successfully.</div>');
6402
6403 // 1-2 saniye sonra yönlendirme yap
6404 setTimeout(function() {
6405 window.location.href = 'admin.php?page=autowp_add_new_website_form';
6406 }, 1500); // 1500 milisaniye = 1.5 saniye
6407 }
6408 });
6409 },
6410 error: function(xhr, status, error) {
6411 var errorMessage = 'Error: An error occurred while confirming the email and API key.';
6412
6413 // Hata mesajını API'den gelen cevaba göre ayarla
6414 if (xhr.responseJSON && xhr.responseJSON.error) {
6415 errorMessage = 'Error: ' + xhr.responseJSON.error;
6416 } else if (xhr.responseText) {
6417 // JSON değilse ham yanıtı göster
6418 errorMessage = 'Error: ' + xhr.responseText;
6419 }
6420
6421 $('#autowp-messages').html('<div class="alert alert-danger">' + errorMessage + '</div>');
6422 }
6423 });
6424
6425 });
6426 });
6427 </script>
6428
6429 <?php
6430 }
6431
6432 // AJAX ile ayarları kaydetme fonksiyonu
6433 function save_autowp_settings() {
6434 // Mevcut ayarları al
6435 $existing_settings = get_option('autowp_settings');
6436 $existing_settings = $existing_settings ? unserialize($existing_settings) : [];
6437
6438 if (isset($_POST['settings'])) {
6439 // Sadece api_email ve api_key değerlerini güncelle
6440 $new_settings = $_POST['settings'];
6441
6442 // Mevcut ayarlarla birleştir (sadece api_email ve api_key'i günceller)
6443 $updated_settings = array_merge($existing_settings, [
6444 'api_email' => isset($new_settings['api_email']) ? sanitize_email($new_settings['api_email']) : '',
6445 'api_key' => isset($new_settings['api_key']) ? sanitize_text_field($new_settings['api_key']) : ''
6446 ]);
6447
6448 // Ayarları güncelle
6449 update_option('autowp_settings', serialize($updated_settings));
6450 }
6451
6452 wp_die(); // AJAX çağrısının sonlandırılması için gerekli
6453 }
6454 add_action('wp_ajax_save_autowp_settings', 'save_autowp_settings');
6455
6456
6457 function autowp_manual_post_selection_page_handler(){
6458 ?>
6459 <!-- Add this in the <head> section of your HTML -->
6460
6461 <div class="wrap">
6462 <h2><?php esc_html__('Manual Post', 'autowp')?></h2>
6463 <p><?php esc_html__('Please select the type of website you want manual posting:', 'autowp')?></p>
6464 <ul class="list-group">
6465 <li class="list-group-item">
6466 <a href="<?php echo esc_url(get_admin_url(null, 'admin.php?page=manual_post_wp_website_form')); ?>" class="d-flex justify-content-between align-items-center">
6467 <div class="d-flex align-items-center">
6468 <img src="<?php echo esc_url( plugins_url( 'assets/images/wordpress-icon.png', __FILE__ ) ); ?>" alt="<?php esc_attr_e('WordPress Website'); ?>" class="me-3" style="width: 80px; height: 80px;">
6469 <div>
6470 <h5><?php esc_html_e('AI-Rewrite From Wordpress Website', 'autowp')?></h5>
6471 <p><?php esc_html_e('Fetch posts from WordPress site and rewrite with artificial intelligence.', 'autowp')?></p>
6472 </div>
6473 </div>
6474 </a>
6475 </li>
6476 <li class="list-group-item">
6477 <a href="<?php echo esc_url(get_admin_url(null, 'admin.php?page=manual_post_rss_website_form')); ?>" class="d-flex justify-content-between align-items-center">
6478 <div class="d-flex align-items-center">
6479 <img src="<?php echo esc_url( plugins_url( 'assets/images/rss-icon.png', __FILE__ ) ); ?>" alt="<?php esc_attr_e('RSS Website'); ?>" class="me-3" style="width: 80px; height: 80px;">
6480 <div>
6481 <h5><?php esc_html_e('AI-Rewrite From RSS Website', 'autowp')?></h5>
6482 <p><?php esc_html_e('Fetch content with RSS and rewrite with artificial intelligence.', 'autowp')?></p>
6483 </div>
6484 </div>
6485 </a>
6486 </li>
6487 <li class="list-group-item">
6488 <a href="<?php echo esc_url(get_admin_url(null, 'admin.php?page=manual_post_ai_website_form')); ?>" class="d-flex justify-content-between align-items-center">
6489 <div class="d-flex align-items-center">
6490 <img src="<?php echo esc_url(plugins_url( 'assets/images/robot-icon.png', __FILE__ )); ?>" alt="Artificial Intelligence" class="me-3" style="width: 80px; height: 80px;">
6491 <div>
6492 <h5><?php esc_attr_e('AI Agents with Web Research Tools', 'autowp')?></h5>
6493 <p><?php esc_attr_e('Create original content from scratch using AutoWP AI Agent with web research tool !', 'autowp')?></p>
6494 </div>
6495 </div>
6496 </a>
6497 </li>
6498
6499 <li class="list-group-item">
6500 <a href="<?php echo esc_url(get_admin_url(null, 'admin.php?page=manual_post_agenticscraper_website_form')); ?>" class="d-flex justify-content-between align-items-center">
6501 <div class="d-flex align-items-center">
6502 <img src="<?php echo esc_url(plugins_url('assets/images/robot-icon.png', __FILE__)); ?>" alt="<?php esc_attr_e('Artificial Intelligence'); ?>" class="me-3" style="width: 80px; height: 80px;">
6503 <div>
6504 <h5><?php esc_attr_e('Agentic Scraper with Custom Tools and Prompts', 'autowp')?></h5>
6505 <p><?php esc_attr_e('Create your own Agentic Scraper with your customize tools and prompts!', 'autowp')?></p>
6506 </div>
6507 </div>
6508 </a>
6509 </li>
6510
6511
6512 <li class="list-group-item">
6513 <a href="<?php echo esc_url(get_admin_url(null, 'admin.php?page=manual_post_news_website_form')); ?>" class="d-flex justify-content-between align-items-center">
6514 <div class="d-flex align-items-center">
6515 <img src="<?php echo esc_url( plugins_url( 'assets/images/gnews.png', __FILE__ ) ); ?>" alt="<?php esc_attr_e('Rewrite With AI From News'); ?>" class="me-3" style="width: 80px; height: 80px;">
6516 <div>
6517 <h5><?php esc_html_e('AI-Rewrite News From Google News ', 'autowp')?></h5>
6518 <p><?php esc_html_e('Fetch content from Google News and rewrite with artificial intelligence.', 'autowp')?></p>
6519 </div>
6520 </div>
6521 </a>
6522 </li>
6523
6524 <!-- New item with modal trigger -->
6525 <li class="list-group-item">
6526 <a href="#" data-bs-toggle="modal" data-bs-target="#tutorialModal" class="d-flex justify-content-between align-items-center">
6527 <div class="d-flex align-items-center">
6528 <img src="<?php echo esc_url(plugins_url( 'assets/images/tutorial.png', __FILE__ )); ?>" alt="Tutorial" class="me-3" style="width: 80px; height: 80px;">
6529 <div>
6530 <h5><?php esc_html_e('Video Tutorials', 'autowp')?></h5>
6531 <p><?php esc_html_e('Learn how to add new process.', 'autowp')?></p>
6532 </div>
6533 </div>
6534 </a>
6535 </li>
6536 </ul>
6537 </div>
6538
6539 <!-- Bootstrap Modal -->
6540 <div class="modal fade" id="tutorialModal" tabindex="-1" aria-labelledby="tutorialModalLabel" aria-hidden="true">
6541 <div class="modal-dialog modal-dialog-centered">
6542 <div class="modal-content">
6543 <div class="modal-header">
6544 <h5 class="modal-title" id="tutorialModalLabel">Video Tutorials</h5>
6545 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
6546 </div>
6547 <div class="modal-body">
6548 <div class="mb-3">
6549 <h5>Manual Processes:</h5>
6550 <p>After clicking the "Generate Post" button at the bottom, your process will start running in the background. The average duration of this process is around 5 minutes. If an error occurs, you can find detailed information at the top of your WordPress admin panel.</p>
6551 </div>
6552
6553 <div class="mb-3">
6554 <h5>Automatic Processes:</h5>
6555 <p>For each added process, it will be automatically triggered at the specified time interval (you can set this in the settings, under the cron section). Therefore, after adding processes, you need to set the time and wait for the posts to be generated automatically.</p>
6556 </div>
6557 <!-- Video Tutorials -->
6558 <div class="mb-3">
6559 <h6>How to Use - Detailed Tutorial </h6>
6560 <iframe width="450" height="350" src="https://www.youtube.com/embed/idN8NNyyjW8" frameborder="0" allowfullscreen></iframe>
6561 </div>
6562
6563 <!-- Timestamp Links -->
6564 <div class="video-timestamps">
6565 <ul>
6566 <li><a href="https://www.youtube.com/watch?v=idN8NNyyjW8&t=0s" target="_blank"><strong>0:00</strong> - Setup AutoWP</a></li>
6567 <li><a href="https://www.youtube.com/watch?v=idN8NNyyjW8&t=46s" target="_blank"><strong>0:46</strong> - Add WordPress website as a source</a></li>
6568 <li><a href="https://www.youtube.com/watch?v=idN8NNyyjW8&t=90s" target="_blank"><strong>1:30</strong> - Add RSS Feed as a source</a></li>
6569 <li><a href="https://www.youtube.com/watch?v=idN8NNyyjW8&t=126s" target="_blank"><strong>2:06</strong> - Add Google News as a source</a></li>
6570 <li><a href="https://www.youtube.com/watch?v=idN8NNyyjW8&t=178s" target="_blank"><strong>2:58</strong> - Posts generated by AutoWP</a></li>
6571 <li><a href="https://www.youtube.com/watch?v=idN8NNyyjW8&t=204s" target="_blank"><strong>3:24</strong> - Content Planner – Adding a Section with Your Own Prompt</a></li>
6572 <li><a href="https://www.youtube.com/watch?v=idN8NNyyjW8&t=440s" target="_blank"><strong>7:20</strong> - Content Planner – Adding a Fixed HTML Section</a></li>
6573 <li><a href="https://www.youtube.com/watch?v=idN8NNyyjW8&t=455s" target="_blank"><strong>7:35</strong> - Content Planner – Ready-Made Section Templates</a></li>
6574 <li><a href="https://www.youtube.com/watch?v=idN8NNyyjW8&t=466s" target="_blank"><strong>7:46</strong> - Content Planner – Adding/Removing Ready-Made Section Templates</a></li>
6575 <li><a href="https://www.youtube.com/watch?v=idN8NNyyjW8&t=487s" target="_blank"><strong>8:07</strong> - Exit</a></li>
6576 </ul>
6577 </div>
6578
6579
6580 <!-- End Video Tutorials -->
6581
6582 </div>
6583 <div class="modal-footer">
6584 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
6585 </div>
6586 </div>
6587 </div>
6588 </div>
6589
6590
6591
6592
6593
6594 </ul>
6595
6596
6597
6598
6599 </div>
6600
6601
6602
6603 <?php
6604 }
6605
6606 // Setup sayfasını kayıt etme
6607 function autowp_register_setup_page() {
6608 add_submenu_page(null, 'AutoWP Setup', 'AutoWP Setup', 'manage_options', 'autowp-setup', 'autowp_setup_page');
6609 }
6610 add_action('admin_menu', 'autowp_register_setup_page');
6611
6612 function autowp_setAdminMenu(){
6613 add_menu_page(__('AutoWP', 'autowp'), __('AutoWP', 'autowp'), 'activate_plugins', 'autowp_menu', 'autowp_generalSettings',plugins_url( '/assets/images/autowp-icon25.png',__FILE__ ));
6614 add_submenu_page('autowp_menu', __('Automatic Post', 'autowp'), __('Automatic Post', 'autowp'), 'activate_plugins', 'autowp_automaticPost', 'autowp_wp_page_handler');
6615 add_submenu_page('autowp_menu', __('Add new', 'autowp'), __('Add new', 'autowp'), 'activate_plugins', 'autowp_add_new_website_form', 'autowp_website_selection_page_handler');
6616 add_submenu_page('autowp_menu', __("Manual Post","autowp"), __("Manual Post","autowp"), '2' ,'autowp_manualPost' ,'autowp_manual_post_selection_page_handler', '7');
6617 add_submenu_page('autowp_menu', __("Content Planner","autowp"), __("Content Planner","autowp"), '3' ,'autowp_promptSettings' ,'autowp_rewriting_promptscheme_page_handler', '8');
6618
6619
6620 //Automatic Post
6621 add_submenu_page('autowp_add_new_website_form', __('Add new WordPress Website', 'autowp'), __('Add new WordPress Website', 'autowp'), 'manage_options', 'add_new_wp_website_form', 'autowp_wp_website_form_page_handler');
6622 add_submenu_page('autowp_add_new_website_form',__('Add new RSS Website', 'autowp'), __('Add new RSS Website', 'autowp'), 'manage_options', 'add_new_rss_website_form', 'autowp_rss_website_form_page_handler');
6623 add_submenu_page('autowp_add_new_website_form', __('Add new AI-Generated Process', 'autowp'), __('Add new AI-Generated Process', 'autowp'), 'manage_options', 'add_new_ai_website_form', 'autowp_ai_website_form_page_handler');
6624 add_submenu_page('autowp_add_new_website_form', __('Add new News Website', 'autowp'), __('Add new News Website', 'autowp'), 'manage_options', 'add_new_news_website_form', 'autowp_news_website_form_page_handler');
6625 add_submenu_page('autowp_add_new_website_form', __('Add new Customize AI Agent', 'autowp'), __('Add new Customize AI Agent', 'autowp'), 'manage_options', 'add_new_agenticscraper_form', 'autowp_auto_post_agent_form_page_handler');
6626
6627
6628 //Manual Post
6629
6630 add_submenu_page('autowp_manualPost', __('Wordpress Website', 'autowp'), __('AI Post Writing', 'autowp'), 'manage_options', 'manual_post_ai_website_form', 'autowp_manual_post_ai_form_page_handler');
6631 add_submenu_page('autowp_manualPost', __('Wordpress Website', 'autowp'), __('Agentic Scraper with Custom Tools', 'autowp'), 'manage_options', 'manual_post_agenticscraper_website_form', 'autowp_manual_post_agenticscraper_form_page_handler');
6632 add_submenu_page('autowp_manualPost', __('Wordpress Website', 'autowp'), __('AI Rewrite Post From RSS Website', 'autowp'), 'manage_options', 'manual_post_rss_website_form', 'autowp_manual_post_rss_form_page_handler');
6633 add_submenu_page('autowp_manualPost', __('Wordpress Website', 'autowp'), __('AI Rewrite Post From Wordpress Website', 'autowp'), 'manage_options', 'manual_post_wp_website_form', 'autowp_manual_post_wp_form_page_handler');
6634 add_submenu_page('autowp_manualPost', __('Wordpress Website', 'autowp'), __('Wordpress Website', 'autowp'), 'manage_options', 'manual_post_news_website_form', 'autowp_manual_post_news_form_page_handler');
6635
6636 //Prompt Settings
6637
6638
6639
6640 //Add a new submenu for Prompt Scheme Management
6641
6642 add_submenu_page('autowp_promptSettings', __('Writing Prompt Schemes', 'autowp'), __('Writing Prompt Schemes', 'autowp'), 'manage_options', 'autowp_promptschemes', 'autowp_writing_promptscheme_page_handler');
6643 add_submenu_page('autowp_promptSettings', __('Content Planner', 'autowp'), __('Prompt Schemes', 'autowp'), 'manage_options', 'autowp_rewriting_promptschemes', 'autowp_rewriting_promptscheme_page_handler');
6644
6645 add_submenu_page(
6646 'autowp_menu', // Parent slug (the AutoWP main menu)
6647 __('Transactions', 'autowp'), // Page title
6648 __('Transactions', 'autowp'), // Menu title
6649 'manage_options', // Capability required to access the page
6650 'autowp_transactions', // Menu slug
6651 'autowp_transactions_page_handler' // Function to display the content
6652 );
6653
6654 // Add a new submenu page for Settings
6655 add_submenu_page('autowp_menu', __('Settings', 'autowp'), __('Settings', 'autowp'), 'activate_plugins', 'autowp_settings', 'autowp_settings_page_handler');
6656
6657
6658 }
6659
6660 add_action('admin_menu','autowp_setAdminMenu');
6661
6662
6663
6664 function autowp_transactions_page_handler() {
6665 // Enqueue Bootstrap styles and scripts
6666 wp_enqueue_style('bootstrap-css', 'https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css');
6667 wp_enqueue_script('bootstrap-js', 'https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js', array('jquery'), null, true);
6668
6669 ?>
6670 <div class="container-fluid mt-5">
6671 <h1 class="text-center"><?php esc_html_e('Transactions Overview', 'autowp'); ?></h1>
6672
6673
6674 <!-- Tab Navigation -->
6675 <ul class="nav nav-tabs" id="transactionsTabs" role="tablist">
6676 <li class="nav-item">
6677
6678 <a class="nav-link active" id="post-tab" data-toggle="tab" href="#post" role="tab" aria-controls="post" aria-selected="true"><?php esc_html_e('Post Transactions', 'autowp'); ?></a>
6679
6680 </li>
6681 <li class="nav-item">
6682 <a class="nav-link" id="image-tab" data-toggle="tab" href="#image" role="tab" aria-controls="image" aria-selected="false"><?php esc_html_e('Image Transactions', 'autowp'); ?></a>
6683
6684 </li>
6685 <li class="nav-item">
6686 <a class="nav-link" id="exceptions-tab" data-toggle="tab" href="#exceptions" role="tab" aria-controls="exceptions" aria-selected="false"><?php esc_html_e('Error Logs', 'autowp'); ?></a>
6687 </li>
6688 </ul>
6689
6690 <!-- Tab Content -->
6691 <div class="tab-content" id="transactionsTabsContent">
6692 <!-- Post Transactions Tab -->
6693 <div class="tab-pane fade show active" id="post" role="tabpanel" aria-labelledby="post-tab">
6694
6695 <div class="card-header">
6696
6697 <h2><?php esc_html_e('Post Transactions', 'autowp'); ?></h2>
6698
6699 </div>
6700 <div class="card-body p-0">
6701
6702 <div class="spinner-border text-primary" role="status" id="post-loading">
6703 <span class="sr-only">Loading...</span>
6704 </div>
6705 <!-- Tam genişlikte tablo ve responsive yapı -->
6706 <div class="table-responsive">
6707 <table class="table table-striped table-bordered w-100" id="post-transactions-table" style="display:none;">
6708 <thead class="thead-light">
6709 <tr id="post-transactions-header"></tr>
6710 </thead>
6711 <tbody></tbody>
6712 </table>
6713 </div>
6714 <div class="alert alert-info" id="post-no-data" style="display:none;">No Post Transactions found.</div>
6715 </div>
6716
6717 </div>
6718
6719 <!-- Image Transactions Tab -->
6720 <div class="tab-pane fade" id="image" role="tabpanel" aria-labelledby="image-tab">
6721
6722 <div class="card-header">
6723 <h2><?php esc_html_e('Image Transactions', 'autowp'); ?></h2>
6724 </div>
6725 <div class="card-body p-0">
6726
6727 <div class="spinner-border text-primary" role="status" id="image-loading">
6728 <span class="sr-only">Loading...</span>
6729 </div>
6730 <div class="table-responsive">
6731 <table class="table table-striped table-bordered w-100" id="image-transactions-table" style="display:none;">
6732 <thead class="thead-light">
6733 <tr id="image-transactions-header"></tr>
6734 </thead>
6735 <tbody></tbody>
6736 </table>
6737 </div>
6738 <div class="alert alert-info" id="image-no-data" style="display:none;">No Image Transactions found.</div>
6739 </div>
6740
6741 </div>
6742
6743 <!-- Exceptions Tab -->
6744 <div class="tab-pane fade" id="exceptions" role="tabpanel" aria-labelledby="exceptions-tab">
6745
6746 <div class="card-header">
6747 <h2><?php esc_html_e('Error Logs', 'autowp'); ?></h2>
6748 </div>
6749 <div class="card-body p-0">
6750
6751 <div class="spinner-border text-primary" role="status" id="exceptions-loading">
6752 <span class="sr-only">Loading...</span>
6753 </div>
6754 <div class="table-responsive">
6755 <table class="table table-striped table-bordered w-100" id="exceptions-table" style="display:none;">
6756 <thead class="thead-light">
6757 <tr id="exceptions-header"></tr>
6758 </thead>
6759 <tbody></tbody>
6760 </table>
6761 </div>
6762 <div class="alert alert-info" id="exceptions-no-data" style="display:none;">No Exceptions found.</div>
6763 </div>
6764 </div>
6765 </div>
6766
6767 </div>
6768
6769 <script type="text/javascript">
6770 document.addEventListener('DOMContentLoaded', function() {
6771 var userEmail = '<?php
6772 $settings = unserialize(get_option('autowp_settings'));
6773 echo esc_js($settings["api_email"]);
6774 ?>'; // Get the API email from autowp_settings
6775
6776 fetchTransactions(userEmail);
6777 });
6778
6779 function createTableHeaders(fields, tableHeaderId) {
6780 let headerHtml = '';
6781 fields.forEach(field => {
6782 headerHtml += '<th>' + field + '</th>';
6783 });
6784 document.getElementById(tableHeaderId).innerHTML = headerHtml;
6785 }
6786
6787 function fetchTransactions(userEmail) {
6788 // Post Transactions
6789 fetch('https://api.autowp.app/post_transactions?user_email=' + userEmail)
6790 .then(response => response.json())
6791 .then(data => {
6792 var postTable = document.getElementById('post-transactions-table');
6793 var postLoading = document.getElementById('post-loading');
6794 var postNoData = document.getElementById('post-no-data');
6795 if (data.length > 0) {
6796 postTable.style.display = 'table';
6797 const fields = Object.keys(data[0]);
6798 createTableHeaders(fields, 'post-transactions-header');
6799 let html = '';
6800 data.forEach(transaction => {
6801 html += '<tr>';
6802 fields.forEach(field => {
6803
6804 html += '<td>' + transaction[field] + '</td>';
6805 });
6806 html += '</tr>';
6807 });
6808 postTable.querySelector('tbody').innerHTML = html;
6809 } else {
6810 postNoData.style.display = 'block';
6811 }
6812 postLoading.style.display = 'none';
6813 });
6814
6815 // Image Transactions
6816 fetch('https://api.autowp.app/image_transactions?user_email=' + userEmail)
6817 .then(response => response.json())
6818 .then(data => {
6819 var imageTable = document.getElementById('image-transactions-table');
6820 var imageLoading = document.getElementById('image-loading');
6821 var imageNoData = document.getElementById('image-no-data');
6822 if (data.length > 0) {
6823 imageTable.style.display = 'table';
6824 const fields = Object.keys(data[0]);
6825 createTableHeaders(fields, 'image-transactions-header');
6826 let html = '';
6827 data.forEach(transaction => {
6828 html += '<tr>';
6829 fields.forEach(field => {
6830 if (field === 'image_url') {
6831 html += '<td><img src="' + transaction[field] + '" alt="Image" class="img-thumbnail" width="100"></td>';
6832 } else {
6833 html += '<td>' + transaction[field] + '</td>';
6834 }
6835 });
6836 html += '</tr>';
6837 });
6838 imageTable.querySelector('tbody').innerHTML = html;
6839 } else {
6840 imageNoData.style.display = 'block';
6841 }
6842 imageLoading.style.display = 'none';
6843 });
6844
6845 // Exceptions
6846 fetch('https://api.autowp.app/exceptions?user_mail=' + userEmail)
6847 .then(response => response.json())
6848 .then(data => {
6849 var exceptionsTable = document.getElementById('exceptions-table');
6850 var exceptionsLoading = document.getElementById('exceptions-loading');
6851 var exceptionsNoData = document.getElementById('exceptions-no-data');
6852 if (data.length > 0) {
6853 exceptionsTable.style.display = 'table';
6854 const fields = Object.keys(data[0]);
6855 createTableHeaders(fields, 'exceptions-header');
6856 let html = '';
6857 data.forEach(exception => {
6858 html += '<tr>';
6859 fields.forEach(field => {
6860 html += '<td>' + exception[field] + '</td>';
6861 });
6862 html += '</tr>';
6863 });
6864 exceptionsTable.querySelector('tbody').innerHTML = html;
6865 } else {
6866 exceptionsNoData.style.display = 'block';
6867 }
6868 exceptionsLoading.style.display = 'none';
6869 });
6870 }
6871 </script>
6872 <?php
6873 }
6874
6875
6876
6877
6878 ?>