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